LoginSignup
1
0

More than 3 years have passed since last update.

Project Euler 013を解いてみる。「大きな数の足し算」

Last updated at Posted at 2019-09-12

Project Euler 013

013

以下の50桁の数字100個の合計の上から10桁を求めなさい。
37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
~~~~~~~~~~~~~~~~~~~ 長いので省略 ~~~~~~~~~~~~~~~~~~~
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690

->次の問題

考え方

シンプルな問題ですね。Pythonなら大きな数字もそのまま扱えますし、
50桁100個程度ならそのまま計算してしまっても大して時間はかかりませんでした。

euler013.py
def main():
    n = 10
    # 長かったので問題の50桁の数字はテキストファイルにしました
    with open('euler013.txt') as file:
        number_lines = file.readlines()
    all_number_lines = [int(number.strip()) for number in number_lines]  # strからintへ変換
    all_sum_numbers = sum(all_number_lines)  # 合計
    print(all_sum_numbers)  # 全部表示
    print(str(all_sum_numbers)[:n])  # 先頭10桁だけ表示

if __name__ == '__main__':
    main()

これが1000桁とかになって来たら先頭の10桁だけで計算して、あとは大きい桁から逆順に繰り上がりの影響がなくなる場所までさかのぼって行く感じになるんでしょうか。
今回の場合、先頭から11桁を足すだけで5537376230342が得られ、ここより後ろの数字がなんであれ後半3桁の342に繰り上がりが吸収されるので同じ結果になります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0