受项目Euler#17的启发,这是您的挑战。编写一个完整的程序或函数,以数字作为输入,然后打印或返回用英语计算该数字(包括该数字在内)需要多少个字母(从一个开始)。您不能包含空格,逗号或连字符,但应包含单词and
。例如。342拼写为:Three Hundred and Forty-Two
。这是23个字母长的字母。
您的输入将是一个正整数。您不必处理无效的输入。不允许将数字转换为英语的内置程序或库。
这是有关如何拼写数字的所有规则。(注意:我意识到有些人对数字的拼写使用了不同的规则。这只是本次挑战的官方规则)
1至20
一,二,三,四,五,六,七,八,九,十,十一,十二,十三,十四,十五,十六,十七,十八,十九,二十
21至99
加入这些:
二十,三十,四十,五十,六十,七十,八十,九十
这些:
-一,-二,-三,-四,-五,-六,-七,-八,-九,
请注意,四个有一个u,但四十个没有!
例子:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100至999
写出几百个(一百个,两百个,三百个,等等),一个“ 和 ”,以及上面其余的数字。该和不计入您的来信得分。
例子:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
1,000至999,999
写下几千(一千,两千,等等),一个逗号,然后按上述其余数字。请注意,如果您没有数百个,则仍然需要和。
例子:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
百万
写出几百万,然后其余的如上。请注意,“百万”是6个零“ 1,000,000”。
例子:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
相同的规则适用于数十亿,万亿,四十亿分之一及以上的数字,但出于这一挑战的目的,您不必处理任何超过999,999,999(99,900,900,99,99,000)的数字,九十九。)
Python求解器
这是一个简短的python脚本,用于验证答案:
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
请注意,这使用NodeBox语言学库将数字转换为英语。(是的,我只是违反了自己的规则,但这不是一个有竞争力的答案)。可在此处免费获得。
样品I / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174