java - 使用递归时如何正确添加字符串

标签 java string recursion

我需要一个递归算法来拼出 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 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);
}

关于java - 使用递归时如何正确添加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147727/

相关文章:

Java:ArrayList 上的 StringUtils.join 返回 NoSuchMethodError 异常

java - 分析两个字符串

c++ - 3d 迷宫递归方法 - C++

java - Java 中递归快速排序的分区实现不起作用

objective-c - 如何在 objective-c iphone sdk 中迭代嵌套字典

java - 如何在JAVA中查找方法的返回类型?

java - Apache CXF 初始化上的调用方法

java - 我想使用两个线程打印斐波那契数列。就像第一个数字应该由第一个线程打印,然后第二个数字由第二个线程打印等等

php - 剥离标签,但保留第一个

string - 如何在 Swift 中将 "Index"转换为类型 "Int"?