Вдохновленный проектом Euler # 17 , это ваш вызов. Напишите полную программу или функцию, которая принимает число в качестве входных данных, затем напечатайте или верните, сколько букв потребуется, чтобы сосчитать до и включая это число на английском языке (начиная с единицы). Вы не включаете пробелы, запятые или дефисы, но должны включать слово and
. Например. 342 пишется: Three Hundred and Forty-Two
. Это 23 буквы длиной.
Ваш ввод будет положительным целым числом. Вам не нужно обрабатывать неверные данные. Встроенные модули или библиотеки, которые конвертируют числа в английский, не допускаются.
Вот все правила о том, как пишется число. (Примечание: я понимаю, что некоторые люди используют другой набор правил для написания чисел. Это будут просто официальные правила для этой задачи)
От 1 до 20
один, два, три, четыре, пять, шесть, семь, восемь, девять, десять, одиннадцать, двенадцать, тринадцать, четырнадцать, пятнадцать, шестнадцать, семнадцать, восемнадцать, девятнадцать, двадцать
С 21 по 99
Присоединяйтесь к этим:
Двадцать, тридцать, сорок, пятьдесят, шестьдесят, семьдесят, восемьдесят, девяносто
к этим:
один, два, три, четыре, пять, шесть, семь, восемь, девять,
Обратите внимание, что у четверки есть вы, а у сорока нет!
Примеры:
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
Вот короткий скрипт на 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