Числа — в текст.

Ах, задачки-шмазки! Вот вспомнил я одну из школьных олимпиады — не просто посчитать, не просто решить уравнение, а вот так, по-человечески: взять число от 1 до 999 и превратить его в текст. Например, 431 — «четыреста тридцать один».

Казалось бы, что тут сложного? Но интернет упорно молчал, будто я искал рецепт борща на Марсе.

А между тем задача жизненная: вот представьте синтезатор речи, который вместо унылого «4-3-1» выдает мелодичное «четыреста тридцать один». Красота!

Давайте разбираться по порядку.

Мы же не говорим «тридцать семь единиц», правда? Просто «тридцать семь». Значит, есть у нас группа чисел — единицы (ну или как хотите), тысячи, миллионы… Чтобы произнести число вроде 25 615 377, разделим его на триадки: двадцать пять миллионов шестьсот пятнадцать тысяч триста семьдесят семь.

Вот где простор для творчества! А внутри каждой тройки — сотни-десyatки-единицы.

И тут начинается веселье. Можно было бы завести массив с названиями всех чисел от 1 до 999 и просто индексироваться к ним — но зачем усложнять жизнь? Олимпиада же!

Время поджимает. Так что надо сделать красиво и быстро.

Представьте себе массивы-константы с сотнями, десятками и единицами:

«Сто», «Двести», «Триста»… И почему-то первая позиция пустая строка — чтобы нули пропускать без лишних вопросов. Знаете, это как сказать: «Ой, у меня нет денег…» и оставить паузу вместо объяснений.

А десятки — это отдельная песня: десять (да-да, именно так), двадцать, тридцать… И опять первая позиция пустая строка — чтобы не путаться с нулями.

Единицы тоже в строю: один, два, три…

Но стоп! Есть же еще те самые загадочные числа от одиннадцати до девятнадцати — они как подростки в мире чисел: особенные и непредсказуемые. Для них отдельный массив с оригинальными названиями.

Теперь переменные: n для введенного числа и k для промежуточной работы. Вот тут начинается магия.

Вводим число от 1 до 999 (ну или ноль для выхода) в бесконечном цикле — потому что кто сказал, что одна попытка достаточно?

Программа терпеливо ждет новых чисел.

Сначала выводим сотни: делим число на сто и смотрим в массив сотен. Потом берем остаток от деления на сто — это будет k.

Почему не меняем n? Потому что если введем ровно сто или двести — остаток будет нулем и программа может подумать, что пора заканчивать. А мы ведь только начали!

Теперь проверяем k: если оно между одиннадцатью и девятнадцатью — выводим из массива оригинальных названий; иначе просто складываем десятки и единицы.

Вот такой простой рецепт превращения цифр в слова!

А теперь анекдот по теме:

— Учительница спрашивает Вовочку: «Как ты скажешь число 15 словами?»
— Пятнадцать!
— Молодец!

А как скажешь число 21?
— Двадцать один!
— Правильно! А если я скажу тебе число 99?
— Девяносто девять!
— Отлично!

А теперь скажи мне слово «сорок».
— Сорок?! Это легко! Четыре раза десять… ой нет… сорок!

Ну а если серьезно, то эта задачка учит нас не только программированию, но и терпению при изучении родного языка с его причудами.

Ведь даже простое число скрывает за собой целый мир словесных приключений.

Так что берите калькулятор в одну руку, клавиатуру в другую и вперед покорять вершины перевода чисел в текстовые шедевры! И помните: главное — не бояться нулей и подростковских чисел от одиннадцати до девятнадцати.

А теперь представьте себе синтезатор речи после такого кода: он будет петь вам числа словно оперный певец — красиво и понятно!