gpt4 book ai didi

c - c程序中的浮点异常

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:01 25 4
gpt4 key购买 nike

在运行这段代码时出现浮点异常,请解释为什么会这样。

#include <stdio.h>
int gcd(long int, int);
int main() {
int t, n, a, i;
long int abc;
scanf("%d", &t);
while (t--) {
abc = 1;
scanf("%d", &n);
abc = n * (n - 1);
for (i = n - 2; i > 1; i--) {
a = gcd(abc, i);
abc = ((abc * i) / a);
}
printf("%ld \n", abc);
}
return 0;
}
int gcd(long int a, int b) {
if (b == 0)
return a;
else {
return (b, a % b);
}
}

最佳答案

gcd 函数中的 else 部分是伪造的。您可能想递归调用 gcd,但您返回的是 a % b。结果是如果 a % b == 0 你在第 13 行除以 0。

表达式 (b, a % b) 被计算为由逗号运算符分隔的两个子表达式。 b 的值被遗忘,整个表达式的值变为 a % b

正确的版本:

int gcd(long int a, int b) {
if (b == 0)
return a;
else {
return gcd(b, a % b);
}
}

关于c - c程序中的浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875547/

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