【发布时间】:2017-06-07 05:06:25
【问题描述】:
为什么会出现错误:Floating point exception: 8
#include<stdio.h>
//grid problem
int fact(int n)
{
int i,f=1;
if(n==0)
return 1;
for(i=1;i<=n;i++)
f*=i;
return f;
}
int uniquePaths(int A, int B) {
float m;
m=fact(A+B-2)/(fact(A-1)*fact(B-1));
return m;
}
int main(int argc, char const *argv[])
{
int a,b;
//aXb grid
scanf("%d%d",&a,&b);
printf("%d\n",uniquePaths(a,b) );
return 0;
}
【问题讨论】:
-
显示您的输入。
-
scanf("%d %d", &a, &b);注意空格。 -
估计是计算大阶乘时发生了溢出。所以除以 0 发生。
-
@Shiva:格式字符串中的空格无关紧要;
%d无论如何都会跳过前导空格。参数之间的空格纯粹是装饰性的。 -
对于 32 位
int,任何总和超过 64 的输入a,b可能会溢出fact(A-1)*fact(B-1),UB 结果为 0。然后int/int 0导致“浮点异常”。发布使用的输入将有助于澄清这篇文章。
标签: c