Loading...
IvanHaribin avatar IvanHaribin 0 Точки

Number 0....100 to text

Здравейте колеги, малко се измъчих с последната задача от домашното с простото условие "Да се напише програма, която превръща число [0…100] в текст: 25 - “twenty five”. След як рисърч в StackOverflow и с малко мислене стигнах до следното решение -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Numbers0._._._100Text
{
    class Program
    {
        static void Main(string[] args)
        {
            var number = int.Parse(Console.ReadLine());
            if (number == 0)
            {
                Console.Write("zero");
            }
           
            else if (number < 0 || number > 100)
            {
                Console.Write("invalid number");
            }
            string words = "";

            if (number > 0)
            {
                if (words != "")
                    words += "and ";
                var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
                var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };

                if (number < 20)
                    words += unitsMap[number];
                else
                {
                    words += tensMap[number / 10];
                    if ((number % 10) > 0)
                        words += " " + unitsMap[number % 10];
                }
            }
            Console.WriteLine(words);
        }
    }
}

 

Въпроса ми е защо при 100 и при числа под 100 или над него дава отговора, но гърми? Judge ми дава 88 точки от 100 заради тези проблеми. Ще съм благодарен за подсказаки ;)

Тагове:
0
Programming Basics
NikolayLiubomirov avatar NikolayLiubomirov 82 Точки
Best Answer

Направи си отделен случай за 100-цата. Ето и едно мое решение:

static void Main()
{
    int n = int.Parse(Console.ReadLine());

    string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    string[] tens = { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
    string[] rounds = { "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" };

    if (n < 0 || n > 100) { Console.WriteLine("invalid number"); }
    else if (n >= 0 && n <= 9) { Console.WriteLine("{0}", digits[n]); }
    else if (n >= 10 && n <= 19) { Console.WriteLine("{0}", tens[n - 10]); }
    else if (n >= 20 && n <= 99)
    {
        if (n % 10 == 0) { Console.WriteLine("{0}", rounds[n / 10 - 2]); }
        else { Console.WriteLine("{0} {1}", rounds[n / 10 - 2], digits[n % 10]); }
    }
    else { Console.WriteLine("one hundred"); }
}

 

0
kokopavlov avatar kokopavlov 2 Точки

Колега, благодаря за полезния отговор, и аз се измъчих да разбера защо ми дава 88 точки, но от твоя код видях, че се очаква, в случай че въведеното число е извън диапазона от 1 до 100 програмата да изпише "Invalid number", което не беше описано в условието.

Та добавих този случай и точките станаха 100.

Сърдечно благодаря!

0
simeon3000 avatar simeon3000 264 Точки

За числото 100 не си написал нищо в програмата, сложи го след нулата например.

За "гърменето" май ще трябва нещо такова: http://www.introprogramming.info/intro-csharp-book/read-online/glava12-obrabotka-na-izklyuchenia/

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.