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

img


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

说明进入死循环了。进入死循环的原因是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;
}