Регистрация
Войти
Стать экспертом Правила
Информатика

СИ ШАРП!!!! Написать программу, которая для любого трехзначного натурального числа печатает его на естественном языке. Например, 107 → сто семь, 234 → двести тридцать четыре, 517 → пятьсот семнадцать.

ОТВЕТЫ

C#

  • string[][] words =
  • {
  • new [] { "", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот "},
  • new [] { "", "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто "},
  • new [] { "", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять",  },
  • new [] { "", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать" },
  • };
  • int[] a = Console.ReadLine().Select(c => int.Parse(c.ToString())).ToArray();
  • string s = words[0][a[0]] + (a[1] == 1 && a[2] != 0 ? words[3][a[2]] : words[1][a[1]] + words[2][a[2]]);
  • Console.WriteLine(s);
  • Console.ReadLine();
  • 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<int, List<string>>

               {

                   {1, new List<string>{"", "", ""}},

                   {2, new List<string>{"Тысяча ", "Тысячи ", "Тысяч "}},

                   {3, new List<string>{"Миллион ", "Миллиона ", "Миллионов "}},

                   {4, new List<string>{"Миллиард ", "Миллиарда ", "Миллиардов "}},

               };

               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<string, string>

               {

                   {"1", "Сто "}, {"2", "Двести "}, {"3", "Триста "}, {"4", "Четыреста "}, {"5", "Пятьсот "},

                   {"6", "Шестьсот "}, {"7", "Семьсот "}, {"8", "Восемьсот "}, {"9", "Девятьсот "}, {"0", ""}

               };

               return d[number];

           }

           

           static string GetDozensName(string number)

           {

               var d = new Dictionary<string, string>

               {

                   {"1", "Десять "}, {"2", "Двадцать "}, {"3", "Тридцать "}, {"4", "Сорок "}, {"5", "Пятьдесят "},

                   {"6", "Шестьдесят "}, {"7", "Семьдесят "}, {"8", "Восемьдесят "}, {"9", "Девяносто "}, {"0", ""}

               };

               return d[number];

           }

           static string GetUnitsName(string number)

           {

               var d = new Dictionary<string, string>

               {

                   {"1", "Один "}, {"2", "Два "}, {"3", "Три "}, {"4", "Четыре "}, {"5", "Пять "},

                   {"6", "Шесть "}, {"7", "Семь "}, {"8", "Восемь "}, {"9", "Девять "}, {"0", ""}

               };

               return d[number];

           }

           

           static string GetExceptionsName(string number)

           {

               var d = new Dictionary<string, string>

               {

                   {"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));

           }

       }

    }

    1. Какой у вас порыв вдохновения, однако :) Хотя, и в моём решении тысячи и миллионы можно добавить в пару дополнительных строчек. Изначально тоже думал через ассоциативный массив делать, но потом увидел, что как-то слишком объёмно получается :)
  • 84
    Контакты
    Реклама на сайте
    Спрошу
    О проекте
    Новым пользователям
    Новым экспертам