トップページに戻る
次のC++のサンプルへ
前のC++のサンプルへ
Problem48 1000の1000乗の最後の10桁
問題
次の式は、1の1乗 + 2の2乗 + 3の3乗 + ... + 10の10乗 = 10405071317 である。
では、1の1乗 + 2の2乗 + 3の3乗 + ... + 1000の1000乗 の最後の10桁を求めよ。
ソース
#include <stdio.h>
//const __int64 TargetVal = 10LL;
const __int64 TargetVal = 1000LL;
void main()
{
__int64 SumVal = 0;
for (__int64 I = 1; I <= TargetVal; I++) {
__int64 wkSumVal = 1;
for (__int64 J = 1; J <= I; J++) {
wkSumVal *= I;
wkSumVal %= 10000000000LL;
}
SumVal += wkSumVal;
SumVal %= 10000000000LL;
}
printf("Answer=%I64d\n",SumVal);
}
実行結果
Answer=9110846700
解説
順に計算しつつ剰余を求めて、不要桁を捨ててます。
__int64型の接尾語としてLLを使い、printf関数の書式指定では、I64dを使ってます。