トップページに戻る
次のC++のサンプルへ
前のC++のサンプルへ
Problem16 2の1000乗の各数字の合計
問題
2の15乗=32768であり、これの各数字の合計は 3+2+7+6+8=26となる。
同様にして、2の1000乗の各数字の合計を求めよ。
ソース
#include <iostream>
void main()
{
//const int Jyousuu = 15;
const int Jyousuu = 1000;
int wkArr[1000+1] ={0};
const int UB = sizeof(wkArr)/sizeof(int)-1;
wkArr[1] = 2;
for (int I = 1; I <= Jyousuu - 1; I++) {
for (int J = 1; J <= UB; J++) {
wkArr[J] *= 2;
}
for (int J = 1; J <= UB; J++) {
if (wkArr[J] >= 10) {
wkArr[J + 1] += wkArr[J] / 10;
wkArr[J] %= 10;
}
}
}
int SumVal = 0;
for(int I=1;I<= UB; I++) {
SumVal+= wkArr[I];
}
std::cout << SumVal << std::endl;
}
実行結果
1366
解説
繰り上がり値を順番に求めていってます。
2の1000乗 < 10の1000乗
であり、log10(10の1000乗) = 1000
よって、1000桁まであれば十分と判断し、
int wkArr[1000+1];
という配列の長さを決めてます。