Код:
#include <stdio.h>
#include <string.h>
int main(void)
{
unsigned long int num;
printf("Введите число от 0 до 4294967295: ");
scanf("%lu", &num);
char *words[] = { "ноль", "одна", "две", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" };
char *tens[] = { "ноль", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто" };
char *hundreds[] = { "ноль", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот" };
char *thousands[] = { "ноль", "одна тысяча", "две тысячи", "три тысячи", "четыре тысячи", "пять тысяч", "шесть тысяч", "семь тысяч", "восемь тысяч", "девять тысяч" };
char *hundreds_thousands[] = { "ноль", "сто тысяч", "двести тысяч", "триста тысяч", "четыреста тысяч", "пятьсот тысяч", "шестьсот тысяч", "семьсот тысяч", "восемьсот тысяч", "девятьсот тысяч" };
char *millions[] = { "ноль", "один миллион", "два миллиона", "три миллиона", "четыре миллиона", "пять миллионов", "шесть миллионов", "семь миллионов", "восемь миллионов", "девять миллионов" };
char *hundreds_millions[] = { "ноль", "сто миллионов", "двести миллионов", "триста миллионов", "четыреста миллионов", "пятьсот миллионов", "шестьсот миллионов", "семьсот миллионов", "восемьсот миллионов", "девятьсот миллионов" };
char *billions[] = { "ноль", "один миллиард", "два миллиарда", "три миллиарда", "четыре миллиарда", "пять миллиардов", "шесть миллиардов", "семь миллиардов", "восемь миллиардов", "девять миллиардов" };
char *hundreds_billions[] = { "ноль", "сто миллиардов", "двести миллиардов", "триста миллиардов", "четыреста миллиардов", "пятьсот миллиардов", "шестьсот миллиардов", "семьсот миллиардов", "восемьсот миллиардов", "девятьсот миллиардов" };
char result[100] = { 0 };
char *crow = " ворон";
int hundreds_billions_num, hundreds_millions_num, millions_num, hundreds_thousands_num, thousands_num, hundreds_num, tens_num, ones_num;
hundreds_billions_num = num / 1000000000;
hundreds_millions_num = (num - hundreds_billions_num * 1000000000) / 100000000;
millions_num = (num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000) / 1000000;
hundreds_thousands_num = (num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000 - millions_num * 1000000) / 100000;
thousands_num = (num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000 - millions_num * 1000000 - hundreds_thousands_num * 100000) / 1000;
hundreds_num = (num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000 - millions_num * 1000000 - hundreds_thousands_num * 100000 - thousands_num * 1000) / 100;
tens_num = (num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000 - millions_num * 1000000 - hundreds_thousands_num * 100000 - thousands_num * 1000 - hundreds_num * 100) / 10;
ones_num = num - hundreds_billions_num * 1000000000 - hundreds_millions_num * 100000000 - millions_num * 1000000 - hundreds_thousands_num * 100000 - thousands_num * 1000 - hundreds_num * 100 - tens_num * 10;
if (num == 0)
{
printf("%s%s", words[0], crow);
return 0;
}
if (hundreds_billions_num > 0)
{
strcat(result, hundreds_billions[hundreds_billions_num]);
strcat(result, " ");
}
if (hundreds_millions_num > 0)
{
strcat(result, hundreds_millions[hundreds_millions_num]);
strcat(result, " ");
}
if (millions_num > 0)
{
strcat(result, millions[millions_num]);
strcat(result, " ");
}
if (hundreds_thousands_num > 0)
{
strcat(result, hundreds_thousands[hundreds_thousands_num]);
strcat(result, " ");
}
if (thousands_num > 0)
{
strcat(result, thousands[thousands_num]);
strcat(result, " ");
}
if (hundreds_num > 0)
{
strcat(result, hundreds[hundreds_num]);
strcat(result, " ");
}
if (tens_num > 1)
{
strcat(result, tens[tens_num]);
strcat(result, " ");
}
if (tens_num == 1)
{
strcat(result, words[10 + ones_num]);
strcat(result, crow);
printf("%s", result);
return 0;
}
if (ones_num > 0)
{
strcat(result, words[ones_num]);
strcat(result, crow);
}
printf("%s", result);
return 0;
}