二项式系数
binomial coefficient
本文关键字:二项式 更新时间:2023-10-16
我有一个计算二项式系数的代码,但是当数字大于20时,它开始计算错误,问题在哪里?谢谢
#include <iostream>
using namespace std;
long int bin(long int x)
{
if(x==0)
return 1;
long int r = x;
for(int i = r-1;i>0;i--)
{
r = r*i;
}
return r;
}
int main()
{
cout << "Write n and k: " << endl;
long int n=0;
long int k=0;
cin >> n;
cin >> k;
long int result = 0;
long int fn = bin(n);
long int fk = bin(k);
long int fnk = bin(n-k);
result = fn/(fk*fnk);
cout << endl << "C = " << result << endl;
return 0;
}
例如12和5 = 792是正确的,但是20和4 = -2是不正确的
您的bin
功能计算阶乘。21的阶乘不适合long
。
您已经依靠实现细节了。long
仅需要32位,但是在您的系统上是64。如果仅是32位,那么您会尽快失败。
20!= 2432902008176640000,远远超出了long int
所容纳的(通常为2147483647)。改用double
。
您正在使用
计算n的阶乘bin(n);
当n> =20。
正如@stevejessop在评论中指出的那样,即使您使用无签名的长长(最长的定点类型),您也会覆盖极限来自0 to 18446744073709551615
您可以使用int-array存储您的结果,作为详细的在此处。
相关文章:
- 如何改进搜索二项式系数的递归算法
- 两个二项式系数模 10^9 + 7 的 GCD
- 二项式模糊图像过滤器将内核应用于图像
- 使用动态编程计算二项式系数
- 二项式系数程序输出错误的结果,如果输入是大的(C++)
- C 中牛顿二项式系数的问题
- 二项式系数
- 牛顿二项式系数C++算法
- 实现二项式堆
- 需要使用帕斯卡三角形 (x+y) 打印二项式系数
- 将 C++ 中的二项式树转换为 Java
- 二项式随机数生成
- C++ 对二项式共效递归函数的误解
- 牛顿二项式 - 不适用于更大的数字
- 二项式系数函数C++错误答案 n>13
- 查找大 n 和 k 模 m 的二项式系数
- %生成二项式系数的mod兼容方式
- 如何通过素数计算非常大的二项式系数模
- 扭曲的二项式系数
- 使用C++TR1从二项式分布生成数