gpt4 book ai didi

c++ - 为什么我的 SPOJ GCD2 代码在 SPOJ 上出错?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:48 28 4
gpt4 key购买 nike

以下是 SPOJ GCD2 的代码.它在我的机器和 Ideone 上运行良好,但在 SPOJ 上出现运行时错误 (SIGFPE)。我已经检查了 spojtoolkit.com 上也提供的所有测试用例。

我无法弄清楚为什么这段代码在 spoj 上显示运行时错误 (SIGFPE)。 SIGFPE 表示错误的算术运算。

为什么这段代码在 SPOJ 上显示运行时错误?

#include <bits/stdc++.h>

using namespace std;

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


int getmod(string b,int a)
{
int n=b.size();
int d;
d= (b[0]-'0') % a;
for(int i=1; i!=n; i++)
{
d=d*10;
d=d + (b[i]-'0');
d= d % a;
}
return d;

}
int main()
{
int tc;
cin >> tc;
int a;
string b;
while(tc--)
{
cin >>a>>b;
int x=getmod(b,a);
cout << gcd(x,a)<<endl;

}
return 0;
}

最佳答案

int getmod(string b,int a)
{
int n=b.size();
int d;
d= (b[0]-'0') % a;

如果 a = 0,这将出错,因为 %0 就像除以零。根据问题陈述,a 可以为零。

错误covers division by zero :

The SIGFPE signal reports a fatal arithmetic error. Although the name is derived from “floating-point exception”, this signal actually covers all arithmetic errors, including division by zero and overflow. If a program stores integer data in a location which is then used in a floating-point operation, this often causes an “invalid operation” exception, because the processor cannot recognize the data as a floating-point number.

您可以通过检查是否 a == 0 并在这种情况下简单地返回 b 作为答案来修复它。否则按原样调用当前函数。

关于c++ - 为什么我的 SPOJ GCD2 代码在 SPOJ 上出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317223/

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