xcx16 2022-02-10 11:44 采纳率: 76.9%
浏览 49

c语言的超时问题和无结果

img


为什么这个超过2就没结果,提交显示超时

  • 写回答

1条回答 默认 最新

  • 易水卷长空 2022-02-10 15:43
    关注

    说明进入死循环了。进入死循环的原因是c的值溢出,b没办法收敛到小于0.00001的值。因为c为i的阶乘,而c的类型为int,能存储的最大值约为21亿,i取13时c就溢出了,c溢出了b的值没法计算,就一直死循环了。
    你可以把c的类型改为long long或_int64

    #include<stdio.h>
    #include<math.h>
    int main(void){
        int i=1;
        _int64 c=1;
        double x=0,b=1,a=1,e=1;
        scanf("%lf",&x);
        while(fabs(b)>0.00001){
            c*=i;
            e*=x;
            b=e/c;
            a+=b;
            i++;
        }
        printf("%.4f",a);
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月10日