阶乘法计算二项式系数的C程序运行出错,求助排查
错误原因排查
- 核心错误是
fak函数内的局部变量fak_n未完全初始化:仅当n<=1时fak_n会被赋值为1,当输入n>1时,fak_n是未初始化的随机垃圾值,后续乘法运算结果完全错误。 - 次要问题:
int类型取值范围有限,阶乘增长速度极快,当n>=13时就会超出32位int的最大值导致溢出,如需计算更大的二项式系数可改用long long甚至无符号长整型。
修复后的代码
#include <stdio.h> int fak(int n) { int fak_n = 1; // 直接在声明时初始化,覆盖所有输入情况 for (int i = 2; i <= n; i++) { fak_n = fak_n * i; } return fak_n; } int bin(int n, int k) { return fak(n) / (fak(k) * fak(n - k)); } int main() { int n; int k; scanf("%d%d", &n, &k); printf("%d\n", bin(n, k)); return 0; }
验证示例
输入5 2,输出应为10,符合二项式系数C(5,2)的计算结果。
内容的提问来源于stack exchange,提问作者user15991497
相关产品推荐
相关产品推荐

