首页 > 其他 > 详细

LeetCode 273 Integer to English Words

时间:2016-08-24 11:22:59      阅读:279      评论:0      收藏:0      [点我收藏+]

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"

题目链接:https://leetcode.com/problems/integer-to-english-words/

题目分析:以Thousand,Million,Billion为分割点,三位三位的去处理,注意0的特殊情况

public class Solution {
    
    final String[] units = {"Zero", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "};
    final String[] tens1 = {"Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "};
    final String[] tensn = {"", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "};
    final String[] base = {"Hundred ", "Thousand ", "Million ", "Billion "};
    final int Billion = 1000000000;
    final int Million = 1000000;
    final int Thousand = 1000;
    final int Hundred = 100;
    final int Ten = 10;
    
    //处理十位数
    public String TNumToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num / Ten == 1) {
            ans.append(tens1[num - Ten]);
        }
        else {
            ans.append(tensn[num / Ten]);
            if(num % Ten != 0) {
                ans.append(units[num % Ten]);
            }
        }
        return ans.toString();
    }
    
    //处理百位数
    public String HNumToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        int H = num / Hundred;
        if(H < Ten) {
            ans.append(units[H]);
            ans.append(base[0]);
        }
        else if(H < Hundred) {
            ans.append(TNumToWords(H));
            ans.append(base[0]);
        }
        ans.append(TNumToWords(num % Hundred));
        return ans.toString();
    }
    
    //判断是个位十位还是百位数
    public String getType(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num < Ten) {
            ans.append(units[num]);
        }
        else if(num < Hundred) {
            ans.append(TNumToWords(num));
        }
        else {
            ans.append(HNumToWords(num));
        }
        return ans.toString();
    }
    
    public String numberToWords(int num) {
        StringBuffer ans = new StringBuffer("");
        if(num == 0) {
            ans.append(units[0]);
            return ans.toString();
        }
        if(num / Billion != 0) {
            ans.append(getType(num / Billion));
            ans.append(base[3]);
            num %= Billion;
        }
        if(num / Million != 0) {
            ans.append(getType(num / Million));
            ans.append(base[2]);
            num %= Million;
        }
        if(num / Thousand != 0) {
            ans.append(getType(num / Thousand));
            ans.append(base[1]);
            num %= Thousand;
        }
        if(num != 0) {
            ans.append(getType(num));
        }
        ans.deleteCharAt(ans.length() - 1);
        return ans.toString();
    }
}




LeetCode 273 Integer to English Words

原文:http://blog.csdn.net/tc_to_top/article/details/52297247

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!