C中的二项式系数

时间:2012-12-02 17:09:11

标签: c

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

对于整数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/)

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

1 个答案:

答案 0 :(得分:1)

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