Задача «Вывод числа прописью»

Реализовать функцию записи числа прописью.

int number_to_text(unsigned long long number, char *buf, size_t bufsize)
{
    /* Преобразует число number в текст и записывает
      в буфер buf, максимального размера bufsize. Если число
      поместилось в буфер, возвращает 0, иначе 1. */
}

Провести тестирование функции с помощью макрооператора assert.

Примечание. Тип unsigned long long является 64-битным и поддерживает значения вплоть до 18446744073709551615 (18 квинтиллионов ...). Чтобы передавать такие числа в функцию, необходмо ставить суффикс UL: 18446744073709551615UL.

Примеры:

  • number_to_text(0, ...) → "ноль"
  • number_to_text(934, ...) → "девятьсот тридцать четыре"
  • number_to_text(1009, ...) → "одна тысяча девять"
  • number_to_text(17301, ...) → "семнадцать тысяч триста один"
  • number_to_text(18446744073709551615UL, ...) → "восемнадцать квинтиллионов четыреста сорок шесть квадриллионов семьсот сорок четыре триллиона семьдесят три миллиарда семьсот девять миллионов пятьсот пятьдесят одна тысяча шестьсот пятнадцать"

Справка. Степени 10:

  • 103 — тысяча;
  • 106 — миллион;
  • 109 — миллиард;
  • 1012 — триллион;
  • 1015 — квадриллион;
  • 1018 — квинтиллион.

Пример работы с 64-битными числами:

#include <stdio.h>

void qq(unsigned long long x) {
    printf("%llu\n", x);
}

void main(void) {
    qq(4000000000000UL);
}