问题描述:

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"
方法一:自己写的,没有层次感,看起来不够清晰

 static String[][] enStr = {
{"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen",
"Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"}, //1-19
{"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"} // 20-90
};
public String numberToWords(int num) {
if(num < 0) //非负整数
return null;
String english = "";
int remain = 0;
if(num / 20 == 0) {//1-19
if(num == 0) //num == 0单独处理
return "Zero";
return enStr[0][num];
} else if(num / 100 == 0){ //20-99
if(num % 10 == 0) //若是20,30,40,50,...,90
return enStr[1][num / 10];
else
return enStr[1][num / 10] + " " + enStr[0][num % 10];
} else if(num / 1000 == 0){//100-999
int h = num / 100;
remain = num % 100;
if(remain >= 20 && remain % 10 ==0){
english = enStr[0][h] + " Hundred " + enStr[1][remain / 10];
} else if(remain >= 20 && remain % 10 > 0){
english = enStr[0][h] + " Hundred " + enStr[1][remain / 10] + " " + enStr[0][remain % 10];
} else if(remain == 0){
english = enStr[0][h] + " Hundred";
} else {
english = enStr[0][h] + " Hundred " + enStr[0][remain];
}
return english;
} else if(num / 1000000 == 0){ //1000-999999
int th = num / 1000;
remain = num % 1000;
if(remain == 0){
return numberToWords(th) + " Thousand";
}
return numberToWords(th) + " Thousand " + numberToWords(remain);
} else if(num / 1000000000 == 0) {//1000000-999999999
int mi = num / 1000000;
remain = num % 1000000;
if(remain == 0){
return numberToWords(mi) + " Million";
}
return numberToWords(mi) + " Million " + numberToWords(remain);
} else { //1000000000-9999999999
int bi = num / 1000000000;
remain = num % 1000000000;
if(remain == 0){
return numberToWords( bi) + " Billion";
}
return numberToWords(bi) + " Billion " + numberToWords(remain);
}
}

方法二:代码整齐,参考别人的
 public String numberToWords(int num) {
if (num < 0) {
return "";
} //数字为0直接返回
if (num == 0) {
return "Zero";
} //左起段落
int segment1 = num / 1000000000; //段落1:十亿位-千亿位
int segment2 = num % 1000000000 / 1000000; //段落2:百万位-亿位
int segment3 = num % 1000000 / 1000; //段落3:千位-十万位
int segment4 = num % 1000; //段落4:个位-百位 String result = ""; if (segment1 > 0) {
result += numToWordsLessThan1000(segment1) + " " + "Billion";
}
if (segment2 > 0) {
result += numToWordsLessThan1000(segment2) + " " + "Million";
}
if (segment3 > 0) {
result += numToWordsLessThan1000(segment3) + " " + "Thousand";
}
if (segment4 > 0) {
result += numToWordsLessThan1000(segment4);
} return result.trim(); //去掉字符串首尾的空格
} private String numToWordsLessThan1000(int num) { if (num == 0 || num >= 1000) {
return "";
} String result = "";
if (num >= 100) {
result += numToWordsBase(num / 100) + " " + "Hundred";
}
num = num % 100;
if (num > 20) {
result += numToWordsBase(num / 10 * 10);
if (num % 10 != 0) {
result += numToWordsBase(num % 10);
}
} else if (num > 0) {
result += numToWordsBase(num);
} return result;
} private String numToWordsBase(int num) {
String result = " ";
switch (num) {
case 1: result += "One"; break;
case 2: result += "Two"; break;
case 3: result += "Three"; break;
case 4: result += "Four"; break;
case 5: result += "Five"; break;
case 6: result += "Six"; break;
case 7: result += "Seven"; break;
case 8: result += "Eight"; break;
case 9: result += "Nine"; break;
case 10: result += "Ten"; break;
case 11: result += "Eleven"; break;
case 12: result += "Twelve"; break;
case 13: result += "Thirteen"; break;
case 14: result += "Fourteen"; break;
case 15: result += "Fifteen"; break;
case 16: result += "Sixteen"; break;
case 17: result += "Seventeen"; break;
case 18: result += "Eighteen"; break;
case 19: result += "Nineteen"; break;
case 20: result += "Twenty"; break;
case 30: result += "Thirty"; break;
case 40: result += "Forty"; break;
case 50: result += "Fifty"; break;
case 60: result += "Sixty"; break;
case 70: result += "Seventy"; break;
case 80: result += "Eighty"; break;
case 90: result += "Ninety"; break;
}
return result;
}

Integer to English words leetcode java的更多相关文章

  1. 【LeetCode】Integer to English Words 解题报告

    Integer to English Words [LeetCode] https://leetcode.com/problems/integer-to-english-words/ Total Ac ...

  2. 【LeetCode】273. Integer to English Words

    Integer to English Words Convert a non-negative integer to its english words representation. Given i ...

  3. leetcode-【hard】273. Integer to English Words

    题目: 273. Integer to English Words Convert a non-negative integer to its english words representation ...

  4. Mybatis的失误填坑-java.lang.Integer cannot be cast to java.lang.String

    Mybatis的CRUD小Demo 为方便查看每次的增删改结果,封装了查询,用来显示数据库的记录: public static void showInfo(){ SqlSession session ...

  5. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String

    今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...

  6. N-Queens II leetcode java

    题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ...

  7. JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String

    参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...

  8. java 解决 java.lang.Integer cannot be cast to java.lang.String

    1.在执行代码打印map的value时,提示错误java.lang.Integer cannot be  cast to java.lang.String,这个错误很明显是类型转换错误 查看表字段的数 ...

  9. java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

    1.错误描写叙述 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String service. ...

随机推荐

  1. CF113D 高斯消元、dp

    题目链接 https://codeforces.com/contest/113/problem/D 思路 \(k[i]=\frac{1-p[i]}{ru[i]}\) f[i][j]表示经过i和j的次数 ...

  2. Linux网络参数和ifconfig

    目录 1.ifconfig 网络参数 2.ifup和ifdown 3.CentOS7网络配置相关文件 4.CentOS7默认网卡接口配置文件 5.补充命令 6.总结: 参考: 1.ifconfig 网 ...

  3. HDU 1392 Surround the Trees(凸包)题解

    题意:给一堆二维的点,问你最少用多少距离能把这些点都围起来 思路: 凸包: 我们先找到所有点中最左下角的点p1,这个点绝对在凸包上.接下来对剩余点按照相对p1的角度升序排序,角度一样按距离升序排序.因 ...

  4. HDU 5965 扫雷(dfs)题解

    题意:给你一个3*n的格子,中间那行表明的是周围8格(当然左右都没有)的炸弹数量,上下两行都可以放炸弹,问你有几种可能,对mod取模 思路:显然(不),当i - 1和i - 2确定时,那么i的个数一定 ...

  5. Windows环境下32位汇编语言程序设计笔记-基础篇

    内存模式 .386 .model flat,stdcall ;子程序调用模式,win32中只能用stdcall,因为win32api调用使用的这个 option casemap:none ;定义了程序 ...

  6. (转) K-Means聚类的Python实践

    本文转自: http://python.jobbole.com/87343/ K-Means聚类的Python实践 2017/02/11 · 实践项目 · K-means, 机器学习 分享到:1 原文 ...

  7. CSS属性大全

    字体属性:(font)大小 font-size:x-large;(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD样式 font-style:oblique;(偏 ...

  8. Python 爬起数据时 'gbk' codec can't encode character '\xa0' 的问题

    1.被这个问题折腾了一上午终于解决了,再网上看到有用  string.replace(u'\xa0',u' ') 替换成空格的,方法试了没用. 后来发现 要在open的时候加utf-8才解决问题. 以 ...

  9. C++类模板和模板类

    C++ 中有一个重要特性,那就是模板类型.类似于Objective-C中的泛型.C++通过类模板来实现泛型支持. 1 基础的类模板 类模板,可以定义相同的操作,拥有不同数据类型的成员属性. 通常使用t ...

  10. 【Python】【进程&线程】

    #[[进程 和 线程 ]] """ # [多进程]'''import os print ('Process (%s) start...' % os.getpid()) # ...