You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类型的结果,格式不匹配导致输出错误值。

修改方案

  1. 将fac函数的返回值类型改为long long,确保计算结果能完整返回:
    long long fac(int m){
        long long int i,s=1;
        for(i=1;i<=m;i++){
            s*=i;
        }
        return s;
    }
    
  2. 修改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,提问作者이윤서

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:30:58