這個問題有你轉換成數字的話 - 300將轉化爲「三百」。我知道這個問題已經解決了堆棧溢出,但我正在尋求一些關於我的特定遞歸解決方案的建議。將數字轉換的話紅寶石 - 提高我的遞歸解決方案
我的解決方案適用於所有數字,除了相同的數字: 100,1000,百萬
以上將返回爲「百」,「千」,「萬」。我明白爲什麼會這樣。
300,3300,32000,35000,等等。任何數量的100%或1000或百萬== 0將返回爲 「3300零」。
我的唯一成功的想法是用第二種方法get_words
通過in_words
運行數量,如果數量是大於0之後,從解決方案中刪除「零」,而剛剛回歸「一」 +號而不是通過in_words
運行如果數字是100/1000/1000000 ...
它可能是我的解決辦法只能這樣工作使用遞歸這裏,但也許我失去了一些東西的侷限性所致。任何人都可以提供一種方法來調整我的解決方案來解決這個問題?
NUMBER_DICTIONARY = {
0 => "zero",
1 => "one",
2 => "two",
3 => "three",
4 => "four",
5 => "five",
6 => "six",
7 => "seven",
8 => "eight",
9 => "nine",
10 => "ten",
11 => "eleven",
12 => "twelve",
13 => "thirteen",
14 => "fourteen",
15 => "fifteen",
16 => "sixteen",
17 => "seventeen",
18 => "eighteen",
19 => "nineteen",
20 => "twenty",
30 => "thirty",
40 => "forty",
50 => "fifty",
60 => "sixty",
70 => "seventy",
80 => "eighty",
90 => "ninety",
100 => "hundred",
1000 => "thousand",
1000000 => "million"
}
def get_words(number)
result = in_words(number)
return "one" + " " + NUMBER_DICTIONARY[number] if (number == 100 || number == 1000 || number == 1000000)
return result.split(" ").delete_if { |word| word == "zero"}.join(" ") if result.include?("zero") && number > 0
result
end
def in_words(number)
#base case
return NUMBER_DICTIONARY[number] if NUMBER_DICTIONARY.include?(number)
#recursion
return in_words(number/1000000) + " " + in_words(1000000) + " " + in_words(number % 1000000) if number > 1000000
return in_words(number/1000) + " " + in_words(1000) + " " + in_words(number % 1000) if number > 1000
return in_words(number/100) + " " + in_words(100) + " " + in_words(number % 100) if number > 100
return in_words((number/10) * 10) + " " + in_words(number % 10) if number > 20
end