Вывести число в текстовую форму (прописью)

Есть задание которое описано ниже, не знаю как его выполнить. На форумах ничего подобного не нашел, надеюсь на вашу помощь.

Реализовать программу, которая введенное число интерпретирует в текстовую форму (словами), выполнять обработку исключительных ситуаций, число не должно быть больше 1000.


Ответы (1 шт):

Автор решения: aepot

Решения на C# 8 я точно не видел нигде, пусть будет, в копилку.

public static string NumberToText(int number)
{
    if (number == 0)
        return "ноль";

    int absNumber = Math.Abs(number);

    if (absNumber > 1000)
        return "слишком большое число";

    StringBuilder sb = new StringBuilder();

    if (number < 0)
        sb.Append("минус ");

    if (absNumber == 1000)
    {
        sb.Append("одна тысяча");
        return sb.ToString();
    }

    sb.Append((absNumber / 100) switch
    {
        1 => "сто ",
        2 => "двести ",
        3 => "триста ",
        4 => "четыреста ",
        5 => "пятьсот ",
        6 => "шестьсот ",
        7 => "семьсот ",
        8 => "восемьсот ",
        9 => "девятьсот ",
        _ => ""
    });

    sb.Append((absNumber / 10 % 10) switch
    {
        2 => "двадцать ",
        3 => "тридцать ",
        4 => "сорок ",
        5 => "пятьдесят ",
        6 => "шестьдесят ",
        7 => "семьдесят ",
        8 => "восемьдесят ",
        9 => "девяносто ",
        _ => ""
    });

    sb.Append((absNumber >= 20 ? absNumber % 10 : absNumber % 20) switch
    {
        1 => "один",
        2 => "два",
        3 => "три",
        4 => "четыре",
        5 => "пять",
        6 => "шесть",
        7 => "семь",
        8 => "восемь",
        9 => "девять",
        10 => "десять",
        11 => "одинадцать",
        12 => "двенадцать",
        13 => "тринадцать",
        14 => "четырнадцать",
        15 => "пятнадцать",
        16 => "шестнадцать",
        17 => "семьнадцать",
        18 => "восемнадцать",
        19 => "девятнадцать",
        _ => ""
    });
    return sb.ToString().Trim();
}

Использование

private void button1_Click(object sender, EventArgs e)
{
    label1.Text = int.TryParse(textBox1.Text, out int number) ? NumberToText(number) : "не удалось распознать число";
}
→ Ссылка