2016-09-02 17 views
-4

Я столкнулся с проблемой ввода 1000000011,5.ошибка сегментации в C++

Выходной сигнал должен быть: 5000000058.

Я столкнулся с ошибкой ошибки сегментации.

#include<iostream> 
using namespace std; 
int main() 
{ 
    int c,r; 
    cin>>r>>c; 
    cout<<endl; 
    int k; 
    if(r%2==1) 
{ 
    k= 10*(r/2)+2*(c-1); 
    } 
    else if(r%2==0) 
{ 
    k=10*(r/2-1)+(2*(c-1)+1); 
    } 
    cout<<k; 
    return 0; 
    } 

`

+0

Вы пробовали использовать отладчик? – Hayt

+0

вы вводите оба номера: 1000000011 5? –

+0

Добавьте 'cout << r << c << endl;' после 'cin', чтобы увидеть, правильно ли вы читаете значения, потому что ничего другого не может вызвать ошибку сегментации. – AhmadWabbi

ответ

0

Вы столкнулись переполнения, не сегментации вины.

5000000058 просто не вписывается в 32-битный int, который используется. Вы должны использовать тип, который использует больше бит для хранения значения.

В этом конкретном случае переход на long long должен сделать трюк.

Изменить int c,r; на long long c,r; и int k; до long long k; и работает как задумано.

Смежные вопросы