今回はeuler17問目を解いていきます!
問題はここです!!
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2017
では、解いていきます!!
##私の考え
まず問題を読んだときに数と英語をどうやって関連付けるか考え調べましたそしたら辞書(dict)が出てきました
それで一からすべてに割り当てるのは大変だから法則を見つけそれでと思いましたコードを見ればわかると思います。
#コード
English_number_li = []
def English_number(n):
eng_num = {
0:"",
1:"one",
2:"two",
3:"three",
4:"four",
5:"five",
6:"six",
7:"seven",
8:"eight",
9:"nine",
}
eng_ten = {
0:"ten",
1:"eleven",
2:"twelve",
3:"thirteen",
4:"fourteen",
5:"fifteen",
6:"sixteen",
7:"seventeen",
8:"eighteen",
9:"nineteen",
}
eng_teen = {
2:"twenty",
3:"thirty",
4:"forty",
5:"fifty",
6:"sixty",
7:"seventy",
8:"eighty",
9:"ninety",
}
eng = {
100:"hundred",
1000:"onethousand",
}
num = n
Num = list(str(num))
#print(Num)
#rint(Num[1])
if num == 1000:
txt = (eng[1000])
if 100 <= num < 1000:
if int(Num[1]) == 1:
txt = (eng_num[int(Num[0])] + eng[100] + "and" + eng_ten[int(Num[2])])
if int(Num[1]) == 0:
if int(Num[1]) == 0 and int(Num[2]) == 0:
txt = (eng_num[int(Num[0])] + eng[100])
else:
txt = (eng_num[int(Num[0])] + eng[100] + "and" + eng_num[int(Num[2])])
if int(Num[1]) > 1:
txt = (eng_num[int(Num[0])] + eng[100] + "and" + eng_teen[int(Num[1])] + eng_num[int(Num[2])])
if 20 <= num < 100:
txt = (eng_teen[int(Num[0])] + eng_num[int(Num[1])])
if 10 <= num < 20:
txt = (eng_ten[int(Num[1])])
if 0 < num < 10:
txt = (eng_num[int(Num[0])])
English_number_li.append(txt)
total = 0
for i in range(1000):
i += 1
English_number(i)
total += int(len(English_number_li[i-1]))
print(English_number_li)
print(len(English_number_li[5]))
print(total)
#答えは21124
まずある程度を定義しておきます
定義するのは1~19と10の倍数と100と10000を定義します
そしたらfor文で一文字ずつ足してゴリゴリ計算していきます!!
そして文字の数(len)をたして完成(⋈◍>◡<◍)。✧♡