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

时间:2018-11-05 02:55:11

标签: java string recursion

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

2 个答案:

答案 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);