マツケンのマインド

とある理系大学生のブログです。基本は勉強とつぶやきとまとめです。

プロジェクトオイラー 問題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]

せいっ!(* ´艸`)