【发布时间】:2019-09-29 19:14:16
【问题描述】:
我认为我的代码中没有任何一点我达到零或将其除以零所以任何人都可以帮助我为什么输入 20 75 会出现浮点异常
我只是计算 2*n -1 的阶乘,然后用 n 和 n-1 的阶乘来计算它,但我不知道我的代码在哪里变为零或其他原因
int fact(int num) {
if(num == 1 || num == 0) return 1;
else return (num*fact(num-1));
}
int Solution::solve(int A) {
int val1 = fact(A-1);
int val2 = fact(A-1+A-1);
int ans = (val2/((val1*val1)%1000000007))%1000000007;
return (ans/A)%1000000007;
}
对于 A = 20 或 A = 75,我得到浮点异常
【问题讨论】:
-
因为在过去名称非常有限,整数除以零会触发浮点异常。
(val1*val1)%1000000007) can resolve to 0, so(val2/((val1*val1)%1000000007))`可以去BOOOOM! -
谢谢,我喜欢你对解决方案的看法,这是一种非常聪明的方法,我也希望它能奏效,但不幸的是我仍然面临浮点异常
-
"我不认为..." - 当我到了那个时候,我会拿出调试器。
标签: c++ floating-point