C中的二项式系数

在这里你可以找到我想解决的问题:

对于整数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  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(kk;k++) { binomial=binomial*(k+1)/number; number++; } printf("%lu\n",binomial); } return 0; } 

它适用于示例输入,但解决方案是通过问题站点来判断的

(http://www.spoj.pl/SHORTEN/problems/BINOMIAL/english/)

并且不接受解决方案。 我也尝试了其他输入,并且所有输入都返回了正确的输出。 我的问题是:这个解决方案无效的原因是什么?

由于1000C500约为300位,因此无法以无符号长整数存储。 简而言之,您需要重新开始并考虑更好的技术。