2
if(number > 999999999)
{
    int n_billions;
    n_billions = number/1000000000;
    cout << number;

    number -= n_billions*1000000000;
    cout << number;
}

数値を9000000000(90億)にすると、プログラムを実行した後、変数numberが0ではなく8589934592になる理由がわかりません。

その数がlong longタイプであり、n_billionsが?である可能性がありintますか?

4

1 に答える 1

3

次のように、数十億の数に長い時間を掛けることを確認する必要があります。

number -= n_billions*1000000000LL;

n_billionsそうしないと、 2より大きい整数のオーバーフローが発生します。

long long number = 9000000123LL;
if(number > 999999999) {
    int n_billions;
    n_billions = number/1000000000;
    cout << number << endl;

    number -= n_billions*1000000000LL;
    cout << number << endl;
}

上記は期待通りに印刷 123されます。

もちろん、これは次のように余りを取得することと同じです。

number %= 1000000000;
于 2012-12-20T22:33:02.033 に答える