我在下面的程序中收到 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
最佳答案
35!到目前为止,超出了您平台上 unsigned int
的容量。
然后发生的事情是 fact(35)
返回 0,这会导致除以 0,因此 SIGFPE(f位于 p点e异常(exception))。
考虑使用unsigned long long
类型,但这对于35也没有帮助,因为35!真的很大。
关于c - 为什么这个程序给我一个 SIGFPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875782/