質問: (int)total % 100000; printf("%dです", amari); } ``` ですが実行結果がなぜか ``` -83648です ``` というように負になってしまいます。どうしてでしょうか?
回答: C 言語の変数は、その型で扱える以上の数字を入れるとオーバーフローして正確な値を示さなくなります。多いのが負の値になることで、これは最上位ビットが 1 の場合負とみなすという仕様によるもので、数が大きくなりすぎて最上位ビットが 1 になってしまうからです。 500^500 はとても大きい数なので、これをまともに計算しようとするとどうしてもオーバーフローしてしまいます。ここで下 5 桁という条件が生きてきます。 たとえば 2 × 2 は 4 ですね。12 × 12 の下一桁も 4 ですね。192 × 192 の下一桁も 4 ですね。