我需要一个递归算法来拼写出1到21亿之间的任何数字。我已经把程序的主要部分整理出来了,但是在将Strings输入拼写数字时遇到了麻烦。
例如1,234,567张照片: “ 12.134亿5657。”
我了解为什么它要在“百万”之前打印“千”,但我很难找到正确的工作方式来处理“一百”,“千”,“百万”和“十亿”,以便它们以正确的顺序。预先感谢。
static String[] numbers = { "zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "ninteen", "twenty"};
static String[] tens = {"twenty-", "thirty-", "fourty-", "fifty-",
"sixty-", "seventy-", "eighty-", "ninety-"};
//static String[] hundreds = {"hundred", "thousand", "million", "billion"};
private static String say(int n) {
if (n <= 20) {
return numbers[n];
}
else if (n < 100) { // 99
return tens[(n / 10) - 2] + say(n % 10); // TODO: fix seventy-zero
}
else if (n < 1000) { // 999 max
return say(n / 100) + " hundred " + say(n % 100);
}
else if (n < 1000000) { // 999,999 max
return say(n / 1000) + " thousand " + say(n % 1000);
}
else if (n < 1000000000) { // 999,999,999 max
return say(n / 1000) + " million " + say(n % 1000);
}
else if (n <= 2147483647) { // 2,147,483,647 max integer value
return say(n / 1000) + " billion " + say(n % 1000);
}
else
return "error";
}
答案 0 :(得分:1)
您更新了十万个刊登位置 但忘了更新百万和十亿的配售额。
else if (n < 1000000000) { // 999,999,999 max
return say(n / 1000_000) + " million " + say(n % 1000_000);
}
else if (n <= 2147483647) { // 2,147,483,647 max integer value
return say(n / 1000_000_000) + " billion " + say(n % 1000_000_000);
}
答案 1 :(得分:0)
首先,您应该删除所有else
个单词。您有return语句可以在真实条件下终止进一步执行。
第二,例如12_345_678
首先满足n < 1_000_000_000
条件。并且将返回say(12_000) + " million " + say(678);
,而正确的将是say(12) + " million " + say (345_678);
。为此,您需要say(n / 1_000_000) + " million " + say(n % 1_000_000);