Софтуерно Инженерство
Loading...
+ Нов въпрос
tdk928 avatar tdk928 108 Точки

Number 0..100 to Text

Здравейте, имам проблем с кода.Трябва да въведа число от конзолата и да го изпише с думи.Над 100 - invalid number.Пример:
55
fifty five:
255
invalid number
Та..  Проблемът ми е ,че кода ми отпечатва числата от 0-10 и от 20-100 но неможе 10-20 при опит да отпечатам 14 ми излиза four при опит да отпечатам 585 - five и така при 10-20 и 100+ ми отпечатва само последната цифра.
 

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

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = int.Parse(Console.ReadLine());
            double tens = a / 10;
            double ones = a % 10;


           
            if (a == 0)
            {
                Console.WriteLine("zero");
            }
            
            if ( tens == 2)
            {
                Console.Write("twenty ");
            }
            else if (tens == 3)
            {
                Console.Write("thirty ");
            }
            else if (tens == 4)
            {
                Console.Write("fourty ");
            }
            else if (tens == 5)
            {
                Console.Write("fifty ");
            }
            else if (tens == 6)
            {
                Console.Write("sixty ");
            }
            else if (tens == 7)
            {
                Console.Write("seventy ");
            }
            else if (tens == 8)
            {
                Console.Write("eighty ");
            }
            else if (tens == 9)
            {
                Console.Write("ninety ");
            }

            if (ones == 1)
            {
                Console.WriteLine("one");
            }
            else if ( ones == 2)
            {
                Console.WriteLine("two");
            }
            else if (ones == 3)
            {
                Console.WriteLine("three");
            }
            else if (ones == 4)
            {
                Console.WriteLine("four");
            }
            else if (ones == 5)
            {
                Console.WriteLine("five");
            }
            else if (ones == 6)
            {
                Console.WriteLine("six");
            }
            else if (ones == 7)
            {
                Console.WriteLine("seven");
            }
            else if (ones == 8)
            {
                Console.WriteLine("eight");
            }
            else if (ones == 9)
            {
                Console.WriteLine("nine");
            }
            else if ( a == 100)
            {
                Console.WriteLine("one hundred");
            }
            else if (a > 100)
            {
                Console.WriteLine("invalid number");
            }

        }
    }
}
 

Тагове:
0
Programming Basics
dimitur_botev avatar dimitur_botev 112 Точки

Смени double tens на int tens, защото когато разделиш приметно 13/ 10 връща double 1.3  и не влиза в никое от улсовията. Когато делиш примерно 20 /10 връща 2 и за това влиза в проверките, но това е частен случай. Когат го направиш на int часта зад десетичната запетая не се записва и така ще имаш цифра, не дробна стойност

0
30/06/2016 23:06:37
tdk928 avatar tdk928 108 Точки

Благодаря за уточнението смених го но отново не ми изкарва invalid number при въвеждане на > 100 . Накрая смених и с само с else но пак нестава.

0
dimitur_botev avatar dimitur_botev 112 Точки

Според мен най-удачно е да проверяваш за > 100  и == 100 най-напред, защото иначе влиза в логиката и почва да принти думи, докато направи тези две проверки  вече е амазано :) Направи така if(a > 100) {

  Console.WriteLine("invalid number");

}else if( a == 100) {

    Console.WriteLine("one hundred");

}else{

цялата останало логика без проверката за > 100 и == 100

}

 

0
30/06/2016 23:32:06
tdk928 avatar tdk928 108 Точки

Прав си така вади > 100 но когато въведа 586 ми изважда:

five

invalid number 
отново ми вади последната цифра на числото+

в judge в детайлите имам проблем.за 20-100 използвам
else if (tens == 5)
            {
                Console.Write("fifty ");
            }
 else if (ones == 5)
            {
                Console.WriteLine("five");
            }

Така нямам никакъв проблем когато числото е 55 заради интервала след fifty.Но когато числото е 50 ми изкарва "fifty " което е грешка в judge.

0
Luko193 avatar Luko193 342 Точки

Ето това е моят код за тази задача: http://pastebin.com/8VXrpJqy. Можеш да изпишеш чрез switch statement директно числата от 0 до 19. За по-големите числа, трябва да раздробиш числото до цифри и спрямо тях да изпишеш цялото наименование на числото. Дано съм помогнал.

0
tdk928 avatar tdk928 108 Точки

Благодаря за решението но все още не съм стигнал до switch и ми се иска да я реша с сегашните си знания и този метод.

0
borislav9212 avatar borislav9212 746 Точки

Здравей,

Имаш пропуснати проверки, затова не ти отпечатва някой от числата. Редактирах ти кода, малко дълъг стана, но така е с "if-else" проверките-> http://pastebin.com/EWJVtAgA

Ето едно решение със "switch-case", малко по кратко -> http://pastebin.com/fXdMPqfK

И още по-кратко с Dictionary -> http://pastebin.com/187AcLQ3

0
srebrina.kirova avatar srebrina.kirova 0 Точки

Тези кодове минават ли в Judje? На решението с масивите мисля, че ти липсва проверка за Невалидно число. Освен това аз имах много ядове с тази задача, защото гърми, ако се въведе дробно, а не цяло число. Накрая ми се наложи да сложа CatchException, за да си събера всички точки 😕 а със знанията, които се очакват за този етап, аз поне нямам идея как да стане😊

0
Pilgrimage avatar Pilgrimage 515 Точки

Минава теста в Judge системата.

А в условието на задачата пише, че входът е цяло число, затова си спестих "излишните" проверки и задълбах в логиката.

0
LardaX avatar LardaX 15 Точки

И мен ме мъчеше тая задачка, но днеска четох за switch case - овете и написах вариант на задачата, който се приемаше от judge-а със 100 точки, но включваше писане на case-ове за числата от 0 до 19. След това помъдрих още малко и с добавянета на един if и && успях да съкратя значително кода, премахвайки числата от 1 до 9 от първия switch case. Прие ми го със 100 точки - погледнете го ако искате. Надявам се да е от полза.

http://pastebin.com/Wk5tmWdY

0
04/07/2016 21:52:20
Radoslav98 avatar Radoslav98 0 Точки

Ето моето решение : http://pastebin.com/5daCrLvf

0