为什么我的 SPOJ GCD2 代码在 SPOJ 上出错?
Why does my code for SPOJ GCD2 error on SPOJ?
以下是 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
根据问题陈述可以为零
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
作为答案来修复它。否则按原样调用当前函数。
以下是 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
根据问题陈述可以为零
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
作为答案来修复它。否则按原样调用当前函数。