2016-09-02 7 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

'cin'の後に 'cout << r << c << endl;'を追加すると、値を正しく読み取ったかどうかが分かります。他に何かがセグメンテーションフォルトを引き起こす可能性があるためです。 – AhmadWabbi

答えて

0

あなたがオーバーフローに直面している、障害セグメンテーションありません。

5000000058は、単に使用されている32ビットのintに収まりません。より多くのビットを使用して値を格納する型を使用する必要があります。

この具体的なケースでは、long longに変更するとそのトリックを行う必要があります。

変更int c,r;からlong long c,r;およびint k;からlong long k;に変更され、意図したとおりに動作します。

関連する問題