c - C 中的二项式系数

标签 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 <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/

相关文章:

c - 在末尾插入链表

c - 下面的内存分配有什么不同吗?

c++ - 如何通过其 HWND 句柄更改另一个进程中 TDateTimePicker 控件中当前选定的日期?

c - Strcat() 抛出访问冲突异常。为什么?

c - 如何创建保存从 0000 到 1000 的银行帐号的随机访问文件

c - 如何将文件的内容存储到数组中(直到其最大容量)

c++ - Linux 链接器/加载器的环境覆盖

c - 将第一个值添加到二叉搜索树无法查看

c - 带 2 补码的额外字节

c - 全局数据单线程写入多线程读取