プロジェクトオイラー 問題16(project euler problem 16)
こんにちは、マツケンです。
さあさあ、やっていきましょう!
今回の問題↓
Problem 16 - PukiWiki
<考え方>
・2^1000は大きい数になるので、配列を用いて大きい桁数も表現するようにする。
・全部かけ終えたら、各桁の数を足し合わせていく。
・ほかにはないかな。<ソースコード>
/* 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 2^1000? */ #include <stdio.h> #include <time.h> int main(void){ int sum = 0; int rank1 = 0; // 桁上がりを入れる変数 int rank2 = 0; // その桁の値を入れる変数 int ans[400] = {0};//桁が大きいので配列を使って表現したい! clock_t start, end; start = clock(); ans[0] = 1; for(int i = 0; i < 1000; i++){ for(int j = 0; j < 400; j++){//一桁ずつ検証 sum = ans[j] * 2 + rank2; rank2 = sum / 10; // 桁上がりの保存 rank1 = sum % 10; // 注目している桁の数値を代入 ans[j] = rank1; } } sum = 0;//求めたい答えを出す準備 for(int i = 0; i < 400; i++) sum += ans[i]; end = clock(); printf("解答は%d\n", sum); printf("経過時間%d[ms]\n", end - start); return 0; } //long longダメだった //クリアー!!
<実行結果>
解答は1366 経過時間0[ms]
せいっ!(* ´艸`)