Скриншоты примеров работы во вложениях к ответу.
Код:
using System;
using System.Collections.Generic;
namespace PrintNumbersNaturaly
{
class Program
{
static string GetShardName(int n, string hundreds, string dozens, string units)
{
var d = new Dictionary>
{
{1, new List{"", "", ""}},
{2, new List{"Тысяча ", "Тысячи ", "Тысяч "}},
{3, new List{"Миллион ", "Миллиона ", "Миллионов "}},
{4, new List{"Миллиард ", "Миллиарда ", "Миллиардов "}},
};
if (dozens != "1")
{
switch (units)
{
case "1":
return d[n][0];
case "2":
case "3":
case "4":
return d[n][1];
default:
return d[n][2];
}
}
return d[n][2];
}
static string GetHundredsName(string number)
{
var d = new Dictionary
{
{"1", "Сто "}, {"2", "Двести "}, {"3", "Триста "}, {"4", "Четыреста "}, {"5", "Пятьсот "},
{"6", "Шестьсот "}, {"7", "Семьсот "}, {"8", "Восемьсот "}, {"9", "Девятьсот "}, {"0", ""}
};
return d[number];
}
static string GetDozensName(string number)
{
var d = new Dictionary
{
{"1", "Десять "}, {"2", "Двадцать "}, {"3", "Тридцать "}, {"4", "Сорок "}, {"5", "Пятьдесят "},
{"6", "Шестьдесят "}, {"7", "Семьдесят "}, {"8", "Восемьдесят "}, {"9", "Девяносто "}, {"0", ""}
};
return d[number];
}
static string GetUnitsName(string number)
{
var d = new Dictionary
{
{"1", "Один "}, {"2", "Два "}, {"3", "Три "}, {"4", "Четыре "}, {"5", "Пять "},
{"6", "Шесть "}, {"7", "Семь "}, {"8", "Восемь "}, {"9", "Девять "}, {"0", ""}
};
return d[number];
}
static string GetExceptionsName(string number)
{
var d = new Dictionary
{
{"11", "Одиннадцать "}, {"12", "Двенадцать "}, {"13", "Тринадцать "}, {"14", "Четырнадцать "},
{"15", "Пятьнадцать "}, {"16", "Шестнадцать "}, {"17", "Семнадцать "}, {"18", "Восемнадцать "},
{"19", "Девятнадцать "}
};
return d.ContainsKey(number) ? d[number] : string.Empty;
}
static string GetNumberName(string number)
{
var n = (int) Math.Ceiling(number.Length / 3.0);
var k = 3 - (number.Length - 1) % 3 - 1;
number = new string('0', k) + number;
var name = "";
for (var i = n; i > 0; --i)
{
var hundreds = number[i * 3 - 3].ToString();
var dozens = number[i * 3 - 2].ToString();
var units = number[i * 3 - 1].ToString();
var shard = GetHundredsName(hundreds);
var exceptionsName = GetExceptionsName(dozens + units);
if (exceptionsName != string.Empty)
{
shard += exceptionsName;
}
else
{
var dozensName = GetDozensName(dozens);
var unitsName = GetUnitsName(units);
shard += dozensName + unitsName;
}
name = shard + GetShardName(n - i + 1, hundreds, dozens, units) + name;
}
return name;
}
static string GetNumberName(int number)
{
return GetNumberName(number.ToString());
}
static void Main(string[] args)
{
var number = Console.ReadLine();
Console.WriteLine(GetNumberName(number));
}
}
}