在这里你可以找到我想解决的问题:
对于整数n和k(0 <= k <= n <1001)确定(二项式系数)。
输入
标准输入的第一行包含一个整数t(t <1001),这是测试用例的数量。
在接下来的每一行中,都有数字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/)
并且不接受该解决方案。我也尝试了其他输入,并且所有输入都返回了正确的输出。我的问题是:这个解决方案无效是否有原因?
答案 0 :(得分:1)
由于1000C500约为300位数,因此无法以无符号长整数存储。简而言之,你需要重新开始思考一种更好的技术。