[Homework] C# Basics - Lecture 5 - Problem 11. * Number as Words
Task: Write a program that converts a number in the range [0…999] to words, corresponding to the English pronunciation.
Някой има ли идея как може да се реши задачата освен със много много if-ове и switch-ове? Все пак не е толкова засукана, колкото задачата за римските числа, но има ли някакъв хитър начин?
Поздрави и благодаря!
Ще добавя подсказака, числото:
930 = nine hundred thirty
Опитай се да разгледаш по - големите числа като съвкупност от по - малки :) И как може да се направи връзката с тях като дефинираме единствено числата от 1 - 10 :)
Може би ще добавя още мъничко:
Дефинираме числата от 1 до 10 както казах,
Ще е необходимо може би да дефинираме и (20, 30, 40,50,60,70,80,90)
Оттук, ако числото ни е трицифрено какво следва, пример:
134
Проверяваме дали е трицифрено (може би ще сложим една булева променлива(ако е трцифрено към текстовия израз ще добавим hundred))
Сравняваме първото число с предварително дефинираните ни числа от 1 до 10 в предварително създадения ни масив. Ако съответства на някое от тях ( а то ще съответства), взимаме текстовия еквивалент на даденото число :)
Става One Hundred
След което тъй като сме дефинирали и числата 20,30,40....и така нататък взимаме второто число от 134 ( а именно 3), казваме му 3*10 , за да може да го сравним с горе споменатите предварително дефнирани числа ( и отново ако сответства, както е ясно ще вземем текстовия еквивалент на ( в случая 30), който вече е дефиниран) и получаваме:
One Hundred Thirty
И накрая последното число от нашия пример а именно 4 отново със същата процедура сравняваме, извличаме текста от предварително зададения масив и получаваме на финала
One Hundred Thirty Four :)
Надявам се да обясних добре идеята си, ако имаш въпроси питай ще добавям ако трябва нещо, Успех :)
Послепис,
За момента не се сещам за друг начин, чрез който да можем да избегнем употребата на няколко if statement'a, все пак и заглавието на нашата тема в случая е такова :)
Това е доста добра насока, има едно мъничко уточнение, което прави реализирането малко по-сложно, а именно - първата дума трябва да е с главна буква, а останалите - с малка. А именно:
Та поради това трябва да се добавят разни булеви променливи насам-натам (примерно)
@aslv1,
Ко каза? :)
http://www.dotnetperls.com/uppercase-first-letter
Ако върнеш цял стринг "eighty nine" ще го превърне в Eighty nine, дори не виждам защо ти е булева променлива ? :)