Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231- 1.

For example,

123 - > "One Hundred Twenty Three"
12345 - > "Twelve Thousand Three Hundred Forty Five"
1234567 - > "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
    String[] ones = {"", "One ","Two ","Three ","Four ","Five ","Six ","Seven ","Eight ","Nine "};
    String[] ten = {"Ten ","Eleven ","Twelve ","Thirteen ","Fourteen ","Fifteen ","Sixteen ","Seventeen ","Eighteen ","Nineteen "};
    String[] tens = {"Twenty ","Thirty ","Forty ","Fifty ","Sixty ","Seventy ","Eighty ","Ninety "};
    String[] hundreds = {"","Thousand ","Million ","Billion "};
    public String numberToWords(int num) {
        if (num < 1) {
            return "Zero";
        }
        StringBuilder sb = new StringBuilder();
        if (num / 1000000000 > 0) {
            sb.append(ones[num / 1000000000]).append(hundreds[3]);
            num -= num / 1000000000 * 1000000000;
        }
        if (num / 1000000 > 0) {
            int temp = num / 1000000;
            sb.append(hundred(temp)).append(hundreds[2]);
            num -= temp * 1000000;
        }
        if (num / 1000 > 0) {
            int temp = num / 1000;
            sb.append(hundred(temp)).append(hundreds[1]);
            num -= temp * 1000;
        }
        sb.append(hundred(num));
        return sb.toString().trim();
    }
    private String hundred(int num) {
        StringBuilder sb = new StringBuilder();
        if (num >= 100) {
            sb.append(ones[num / 100]).append(hundreds[0]);
            num -= num / 100 * 100;
        }
        if (num / 10 > 1) {
            sb.append(tens[num / 10 - 2]);
            num -= num / 10 * 10;
        }
        if (num / 10 == 1) {
            sb.append(ten[num % 10]);
        } else {
            sb.append(ones[num % 10]);
        }
        return sb.toString();
    }

更好1:

private final String[] LESS_THAN_20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
private final String[] TENS = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
private final String[] THOUSANDS = {"", "Thousand", "Million", "Billion"};

public String numberToWords(int num) {
    if (num == 0) return "Zero";

    int i = 0;
    String words = "";

    while (num > 0) {
        if (num % 1000 != 0)
            words = helper(num % 1000) +THOUSANDS[i] + " " + words;
        num /= 1000;
        i++;
    }

    return words.trim();
}

private String helper(int num) {
    if (num == 0)
        return "";
    else if (num < 20)
        return LESS_THAN_20[num] + " ";
    else if (num < 100)
        return TENS[num / 10] + " " + helper(num % 10);
    else
        return LESS_THAN_20[num / 100] + " Hundred " + helper(num % 100);
}

更好2:

    private final String[] belowTen = new String[] {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
    private final String[] belowTwenty = new String[] {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
    private final String[] belowHundred = new String[] {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};

    public String numberToWords(int num) {
        if (num == 0) return "Zero";
        return helper(num); 
    }

    private String helper(int num) {
        String result = new String();
        if (num < 10) result = belowTen[num];
        else if (num < 20) result = belowTwenty[num -10];
        else if (num < 100) result = belowHundred[num/10] + " " + helper(num % 10);
        else if (num < 1000) result = helper(num/100) + " Hundred " +  helper(num % 100);
        else if (num < 1000000) result = helper(num/1000) + " Thousand " +  helper(num % 1000);
        else if (num < 1000000000) result = helper(num/1000000) + " Million " +  helper(num % 1000000);
        else result = helper(num/1000000000) + " Billion " + helper(num % 1000000000);
        return result.trim();
    }

results matching ""

    No results matching ""