在这里您可以找到我正在尝试解决的问题:
对于整数 n 和 k (0<=k<=n<1001) 确定(二项式系数)。
输入
标准输入的第一行包含一个整数t(t<1001),它是测试用例的数量。
在接下来的 t 行中,每一行都有数字 n 和 k。
输出
对于每个测试打印(二项式系数)。
示例:
Input
3
0 0
7 3
1000 2
Output:
1
35
499500
我似乎在我的解决方案中找不到任何问题(除了写得很糟糕 - 我最近才开始编程):
#include <stdio.h>
int main()
{
unsigned long int t,n,k,binomial=1;
unsigned long int number=1;
for(scanf("%lu",&t);t>0;t--)
{
scanf("%lu%lu",&n,&k);
if(k<(n/2)) k=n-k;
for(binomial=1,number=1;n>k;k++)
{
binomial=binomial*(k+1)/number;
number++;
}
printf("%lu\n",binomial);
}
return 0;
}
对于示例输入来说效果很好,但是解决方案是通过问题站点来判断的
(http://www.spoj.pl/SHORTEN/problems/BINOMIAL/english/)
并且该解决方案不被接受。我也尝试了其他输入,所有输入都返回了正确的输出。我的问题是:这个解决方案无效有什么原因吗?
最佳答案
由于 1000C500 大约有 300 位数字,因此它不能存储在 unsigned long 中。简而言之,您需要重新开始并想出更好的技术。
关于c - C 中的二项式系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671614/