java - 使用递归时如何正确添加字符串
问题描述
我需要一个递归算法来拼出从 1 到 21 亿的任何数字。我已经整理好程序的主要部分,但我无法将字符串转换为拼写出来的数字。
例如 1,234,567 次打印:“一千二亿三千四百万五百六十七”
我明白为什么它在“百万”之前打印“千”,我只是找不到正确的“百”、“千”、“百万”和“十亿”工作方式,以便它们正确命令。提前致谢。
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";
}
解决方案
首先,您应该删除所有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);
推荐阅读
- r - 如何修复 r 中匹配元素的返回
- httrack - 无法使用 HTTrack 登录网站
- python - 来自雅虎财经的网页抓取信息
- c++ - 在 omnet++ IDE 中找不到 -lC:\SQLAPI\lib\sqlapi.lib
- css - Bootstrap 响应式嵌入在 flexbox 中不起作用 - 没有计算高度 - 为什么?
- node.js - 如何在异议模型的 $afterUpdate 挂钩中获取整个更新的条目?
- c# - 少数机器的 ServiceController 类的 Windows 服务启动问题
- python - 从 MATLAB 转换为 python 时,矩阵乘法会呈现不同的结果
- foreach - 如何在 Neo4J Cypher 中将 UNWIND 查询转换为 FOREACH?
- c# - 绕过代理列表未通过 C# 更新