Натхненний проектом 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
Від 1000 до 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 (Дев'ятсот дев'яносто дев'ять мільйонів, дев'ятсот дев'яносто дев'ять тисяч, дев'ятсот дев'яносто дев'ять.)
Python solver
Ось короткий скрипт 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 використовує для перетворення чисел на англійську мову. (так, я просто порушив своє власне правило, але це не є конкурентоспроможною відповіддю) Це вільно доступне тут .
Зразок вводу / виводу
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174