2016-03-28 3 views
2

長さが約9-10桁の大きな数値を計算する必要があります。 9,223,372,036,854,775,807ガーベジ・ロング・ロング・ロング・データ型

から
-9,223,372,036,854,775,808しかし、私はこのコードを実行すると、私は印刷ゴミ値を取得する:MSDNは、long long型のための範囲を持っていることを言う

#include <stdio.h> 
int main(){ 
    int seed = 88888; //This will be always a 5 digit number so the square of 
         // it will be 9 or 10 digits length 
    long long square = seed * seed; 
    printf("square = %lld", square); 
    getchar(); 
    return 0; 
} 

出力: 平方= -688858048

+0

それは次のようになり、印刷後の長いlong' 'ではなく、size_tの使用する(シードが常に正の場合)簡単な修正は次のようになります。 'printf(" square =%lu \ n "、(unsigned long)square);' – user3629249

答えて

5

seedは、タイプintです。 seed*seedintとなります。 88888*88888は、intのサイズをオーバーフローします。その後、このゴミ値をlong longに割り当てます。

変更seedの種類、またはあなたの中にキャスト計算:

long long square = ((long long) seed) * seed; 
+0

ああ、ダムの間違い。どうもありがとうございます!私はこれを8分が過ぎるとすぐにマークします –

+1

@TolgaŞen十分な大きさの値を使用すると、長い間もオーバーフローする可能性があることを忘れないでください。正しい解法は、実際の計算の前に、選択したタイプの乗算が可能かどうかをチェックすることです。 – 2501

関連する問題