2015-08-31 2 views
2

Ниже приведен код для SPOJ GCD2. Он работает хорошо на моей машине и Ideone, но получает ошибку времени выполнения (SIGFPE) на SPOJ. Я проверил все тестовые примеры, также доступные на spojtoolkit.com.Почему мой код для SPOJ GCD2 ошибки на SPOJ?

Я не могу понять, почему этот код показывает ошибку времени выполнения (SIGFPE) на spoj. 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; 
} 
+0

Спрашивание SPOJ постоянно создает плохой контент в StackOverflow. Пожалуйста, прекратите запрашивать такие проблемы без каких-либо дальнейших исследований и отладочных усилий, показанных в вашем вопросе. –

ответ

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:

Сигнал SIGFPE сообщает фатальную арифметическую ошибку. Хотя имя получено из «исключения с плавающей точкой», этот сигнал фактически охватывает все арифметические ошибки, включая деление на ноль и переполнение. Если программа хранит целочисленные данные в местоположении, которое затем используется в операции с плавающей запятой, это часто вызывает исключение «недействительной операции», поскольку процессор не может распознать данные как число с плавающей запятой.

Вы можете это исправить, проверяя, если a == 0 и просто возвращая b как ответ в этом случае. Else вызывать текущую функцию как есть.

+0

Большое спасибо ............... –