Вывести число в текстовую форму (прописью)
Есть задание которое описано ниже, не знаю как его выполнить. На форумах ничего подобного не нашел, надеюсь на вашу помощь.
Реализовать программу, которая введенное число интерпретирует в текстовую форму (словами), выполнять обработку исключительных ситуаций, число не должно быть больше 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) : "не удалось распознать число";
}