gpt4 book ai didi

c - 为什么这个程序给我一个 SIGFPE?

转载 作者:行者123 更新时间:2023-11-30 18:27:46 25 4
gpt4 key购买 nike

我在下面的程序中收到 SIGFPE 错误,并且无法想出删除它的方法。

#include <stdio.h>

unsigned int fact(unsigned long int n)
{
if (n <= 0)
return 1;
return n*fact(n-1);
}


int main(){
int t,r,x,y,z,sum=0,n;

scanf("%d",&t);

for(int l=0; l<t; l++){

scanf("%d",&n );

if(n%2==0){
for(int j=n,i=0,k=n; k>=0&&j>0;i++, j++,k-=2){
x=fact(n-i);
y=fact(k);
z=fact(n-k-i);
sum=sum+ (x)/(y*z);
}
printf("%d\n",sum );
}

if(n%2!=0){
for(int j=n,i=0,k=n; k>=1&&j>0;i++, j++,k-=2){
x=fact(n-i);
y=fact(k);
z=fact(n-k-i);
sum=sum+ (x)/(y*z);

}
printf("%d\n",sum);
}
sum=0;

}
return 0;
}

我正在尝试计算需要阶乘的序列,但这给了我 SIGFPE 错误。我使用 35 作为输入。

问题链接:screen shot

solution

最佳答案

35!到目前为止,超出了您平台上 unsigned int 的容量。

然后发生的事情是 fact(35) 返回 0,这会导致除以 0,因此 SIGFPE(f位于 pe异常(exception))。

考虑使用unsigned long long类型,但这对于35也没有帮助,因为35!真的很大。

关于c - 为什么这个程序给我一个 SIGFPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com