以下是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:



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

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

10-09 03:27