二项式系数函数C++错误答案 n>13
Binomial coefficient function C++ incorrect answer n>13
我正在尝试学习C++,因此我正在尝试做一个函数来计算二项式系数。代码最高可达 n 的 12,对于较大的值,生成的结果不正确。感谢您的投入。
long double binomial(int n, int k) {
int d = n-k;
int i = 1, t = 1, n1 = 1, n2 = 1;
if (d == 0) {
return 1;
} else if (n==0) {
return 1;
} else {
while (i <=n) {
t *= i;
if (i == d) {
n1 = t;
cout << t;
}
if (i == k) {
n2 = t;
cout << t;
}
i++;
}
}
return t/n1/n2;
}
int main() {
int n, k;
cout << "Select an integer n: n";
cin >> n;
cout << "Select an integer k: n";
cin >> k;
long double v = binomial(n,k);
cout << "The binomial coefficient is: " << v << "n";
return 0;
}
int
变量只能容纳一定大小的数字。这因编译器和平台而异,但典型的限制约为 20 亿。您的程序使用的数字大于该值,因此会出现错误。
如果你想用大整数计算,答案是得到一个大整数库。GMP是一种流行的。
如果int
在你的系统上是32位长(现在很常见),那么13的阶乘不适合它(6227020800 > 2147483647
)。
要么过渡到更大的东西(unsigned long long
,有人吗?),要么使用bigint库,或者想出一个更好/更聪明的算法,不涉及计算大阶乘,至少不直接计算。
其中一个建议是使用其他类型。
以下是整数类型、大小和限制的列表。
--------------------------------------------------------------------------------------
|type |size (B)|Limits |
--------------------------------------------------------------------------------------
|long long |8 |–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807|
--------------------------------------------------------------------------------------
|unsigned long long |8 |0 to 18,446,744,073,709,551,615 |
--------------------------------------------------------------------------------------
|int |4 |–2,147,483,648 to 2,147,483,647 |
--------------------------------------------------------------------------------------
|unsigned int |4 |0 to 4,294,967,295 |
--------------------------------------------------------------------------------------
|short |2 |–32,768 to 32,767 |
--------------------------------------------------------------------------------------
|unsigned short |2 |0 to 65,535 |
--------------------------------------------------------------------------------------
|char |1 |–128 to 127 |
--------------------------------------------------------------------------------------
|unsigned char |1 |0 to 255 |
--------------------------------------------------------------------------------------
注意 long
和int
通常大小相同。
请注意,这些限制在所有体系结构上都不相同,标准仅保证变量大小的两件事:
- 1 =
sizeof(char)
=sizeof(unsigned char)
- 2 =
sizeof(shor)
=sizeof(unsigned short)
<=sizeof(int)
=sizeof(unsigned int)
<=sizeof(long)
=sizeof(unsigned long)
<=sizeof(long long)
=sizeof(unsigned long long)
另一种选择是使用 bigint 库,但是在这种情况下,计算将花费更多时间,但会适合。
相关文章:
- 使用 bfs 解决连接组件问题时得到错误的答案
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 乘法宏给出错误的答案
- 谷歌启动B轮巴士路线问题错误的答案?
- 欧拉项目 #8 C++ 得到错误的答案
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 位集上的按位或给出错误的答案
- 在 c++ 中将模板与类一起使用时,类成员函数的答案错误?
- SPOJ PLD的答案错误
- UVA 3n+1(概率 100)答案错误,但所有测试用例均已通过
- 散列!!答案错误,想不通
- 指数的最后一位——答案错误
- 在计算cpp中数字的n次方根时,答案错误
- Euler项目27的答案错误