C语言求n阶乘:输入13时结果与预期不符的问题
解决n=13时阶乘计算结果错误的问题
问题根源
- 函数返回类型不匹配:
fac函数声明返回int,但内部计算变量s是long long类型,返回时会将64位的long long截断为32位的int,导致数据溢出(13! = 6227020800,远大于32位int的最大值2147483647)。 - 输出格式符错误:
printf使用%d(对应int类型)输出long long类型的结果,格式不匹配导致输出错误值。
修改方案
- 将
fac函数的返回值类型改为long long,确保计算结果能完整返回:long long fac(int m){ long long int i,s=1; for(i=1;i<=m;i++){ s*=i; } return s; } - 修改
printf的格式符为%lld,匹配long long类型的输出要求:printf("%lld", fac(n));
完整修改后的代码
#include<stdio.h> long long fac(int m){ long long int i,s=1; for(i=1;i<=m;i++){ s*=i; } return s; } int main(){ int n; scanf("%d",&n); printf("%lld",fac(n)); }
注:如果需要计算更大的n值(如n>20),
long long也会出现溢出,此时需要用数组模拟大数乘法或者使用专门的大数计算库来处理。
内容的提问来源于stack exchange,提问作者이윤서
相关产品推荐
相关产品推荐

