文章目录
- Example 1: Input: 123 Output: "One Hundred Twenty Three" Example 2: Input: 12345 Output: "Twelve Thousand Three Hundred Forty Five" Example 3: Input: 1234567 Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven" Example 4: Input: 1234567891 Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
- 从个位数开始向左,没三位划分一组,每一组都可看成一个“百位数”,除了第一组没有后缀外,从第二组开始的后缀依次为:{Thousand","Million","Billion"} 如输入的数字为:1234567891,则有划分1,234,567,891 1 234 567 891 “百位数” One Two Hundred Thirty Four Five Hundred Sixty Seven Eight Hundred Ninety One 组数 4 3 2 1 后缀 Billion Million Thousand - 得到结果 One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One 最后把这些结果组合在一起即可!
-
- 获取对应字符到还好说,但" "(空白)把我给绕晕了好久!
- class Solution { String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10 String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19 String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90} String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000} public String numberToWords(int num) { String ret = ""; //特殊值0的情况 if(num == 0){ return "Zero"; } int Bil = num / 1000000000; num = num - Bil * 1000000000; if(Bil != 0){ if(num == 0){ //若num为1000000000 ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3]; return ret; }else{ ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " "; } // System.out.println(ret); } int Mil = num / 1000000; num = num - Mil * 1000000; if(Mil != 0){ if(num == 0){ //若num为100000 ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2]; return ret; }else { ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " "; } // System.out.println(ret); } int Tho = num / 1000; num = num - Tho * 1000; if(Tho != 0){ if(num == 0){ //若num为1000 ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1]; return ret; }else{ ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " "; } // System.out.println(ret); } ret = ret + GetStrOfThreeNumber(num); return ret; } //用于获取三位数之内的字符 public String GetStrOfThreeNumber(int num){ String ret = ""; //百位数 int Hun = num / 100; num = num - Hun * 100; if(Hun != 0){ if(num == 0){ //若num 为100 ret = ret + Unit[Hun - 1] + " " + Big[0]; }else{ ret = ret + Unit[Hun - 1] + " " + Big[0] + " "; } } //十位数及个位数:num // 分三种大的情况: // num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下) // 10 < num <= 19; num ==> Tens[num - 10 - 1] // 0 < num <= 10; num ==> Unit[num - 1] if(num > 19){ if(num % 10 == 0) { ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况 }else{ //非十倍整数的情况; int Te = num / 10; //获取十位数(2 <= Te <= 9) num = num - Te * 10;//获取个位数 ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1]; } }else if(num > 10 && num <= 19){ ret = ret + Tens[num - 11]; }else if(num > 0 && num <= 10){ ret = ret + Unit[num -1]; } return ret; } }
- public class Integer_to_English_Words { static public class Solution { String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10 String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19 String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90} String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000} public String numberToWords(int num) { String ret = ""; //特殊值0的情况 if(num == 0){ return "Zero"; } int Bil = num / 1000000000; num = num - Bil * 1000000000; if(Bil != 0){ if(num == 0){ //若num为1000000000 ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3]; return ret; }else{ ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " "; } // System.out.println(ret); } int Mil = num / 1000000; num = num - Mil * 1000000; if(Mil != 0){ if(num == 0){ //若num为100000 ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2]; return ret; }else { ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " "; } // System.out.println(ret); } int Tho = num / 1000; num = num - Tho * 1000; if(Tho != 0){ if(num == 0){ //若num为1000 ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1]; return ret; }else{ ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " "; } // System.out.println(ret); } ret = ret + GetStrOfThreeNumber(num); return ret; } //用于获取三位数之内的字符 public String GetStrOfThreeNumber(int num){ String ret = ""; //百位数 int Hun = num / 100; num = num - Hun * 100; if(Hun != 0){ if(num == 0){ //若num 为100 ret = ret + Unit[Hun - 1] + " " + Big[0]; }else{ ret = ret + Unit[Hun - 1] + " " + Big[0] + " "; } } //十位数及个位数:num // 分三种大的情况: // num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下) // 10 < num <= 19; num ==> Tens[num - 10 - 1] // 0 < num <= 10; num ==> Unit[num - 1] if(num > 19){ if(num % 10 == 0) { ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况 }else{ //非十倍整数的情况; int Te = num / 10; //获取十位数(2 <= Te <= 9) num = num - Te * 10;//获取个位数 ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1]; } }else if(num > 10 && num <= 19){ ret = ret + Tens[num - 11]; }else if(num > 0 && num <= 10){ ret = ret + Unit[num -1]; } return ret; } } public static void main(String [] args){ Solution S = new Solution(); int [] num = {1,12,88,123,1234,12345,123456,1234567,12345678,123456789,1234567891,0,10,20,100,1000,10000,100000,1000000000}; // 打印所有数组元素 for (int i = 0; i < num.length; i++) { System.out.println(num[i] + ":" + S.numberToWords(num[i])+"D"); //用D来判断最后一个字母之后是否有空格的存在? } } }
- 获取对应字符到还好说,但" "(空白)把我给绕晕了好久!
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
- Example 1:
Input: 123
Output: "One Hundred Twenty Three"
- Example 2:
Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"
- Example 3:
Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
- Example 4:
Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
Input: 123
Output: "One Hundred Twenty Three"
Input: 12345
Output: "Twelve Thousand Three Hundred Forty Five"
Input: 1234567
Output: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
Input: 1234567891
Output: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"
从个位数开始向左,没三位划分一组,每一组都可看成一个“百位数”,除了第一组没有后缀外,从第二组开始的后缀依次为:{Thousand","Million","Billion"}
从个位数开始向左,没三位划分一组,每一组都可看成一个“百位数”,除了第一组没有后缀外,从第二组开始的后缀依次为:{Thousand","Million","Billion"}
如输入的数字为:1234567891,则有划分1,234,567,891
| 1 | 234 | 567 | 891 | |
|---|---|---|---|---|
| “百位数” | One | Two Hundred Thirty Four | Five Hundred Sixty Seven | Eight Hundred Ninety One |
| 组数 | 4 | 3 | 2 | 1 |
| 后缀 | Billion | Million | Thousand | - |
| 得到结果 | One Billion | Two Hundred Thirty Four Million | Five Hundred Sixty Seven Thousand | Eight Hundred Ninety One |
最后把这些结果组合在一起即可!
获取对应字符到还好说,但" "(空白)把我给绕晕了好久!
获取对应字符到还好说,但" "(空白)把我给绕晕了好久!
class Solution {
String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10
String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19
String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90}
String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000}
public String numberToWords(int num) {
String ret = "";
//特殊值0的情况
if(num == 0){
return "Zero";
}
int Bil = num / 1000000000;
num = num - Bil * 1000000000;
if(Bil != 0){
if(num == 0){ //若num为1000000000
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " ";
}
// System.out.println(ret);
}
int Mil = num / 1000000;
num = num - Mil * 1000000;
if(Mil != 0){
if(num == 0){ //若num为100000
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2];
return ret;
}else {
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " ";
}
// System.out.println(ret);
}
int Tho = num / 1000;
num = num - Tho * 1000;
if(Tho != 0){
if(num == 0){ //若num为1000
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " ";
}
// System.out.println(ret);
}
ret = ret + GetStrOfThreeNumber(num);
return ret;
}
//用于获取三位数之内的字符
public String GetStrOfThreeNumber(int num){
String ret = "";
//百位数
int Hun = num / 100;
num = num - Hun * 100;
if(Hun != 0){
if(num == 0){ //若num 为100
ret = ret + Unit[Hun - 1] + " " + Big[0];
}else{
ret = ret + Unit[Hun - 1] + " " + Big[0] + " ";
}
}
//十位数及个位数:num
// 分三种大的情况:
// num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下)
// 10 < num <= 19; num ==> Tens[num - 10 - 1]
// 0 < num <= 10; num ==> Unit[num - 1]
if(num > 19){
if(num % 10 == 0) {
ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况
}else{ //非十倍整数的情况;
int Te = num / 10; //获取十位数(2 <= Te <= 9)
num = num - Te * 10;//获取个位数
ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1];
}
}else if(num > 10 && num <= 19){
ret = ret + Tens[num - 11];
}else if(num > 0 && num <= 10){
ret = ret + Unit[num -1];
}
return ret;
}
}
class Solution {
String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10
String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19
String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90}
String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000}
public String numberToWords(int num) {
String ret = "";
//特殊值0的情况
if(num == 0){
return "Zero";
}
int Bil = num / 1000000000;
num = num - Bil * 1000000000;
if(Bil != 0){
if(num == 0){ //若num为1000000000
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " ";
}
// System.out.println(ret);
}
int Mil = num / 1000000;
num = num - Mil * 1000000;
if(Mil != 0){
if(num == 0){ //若num为100000
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2];
return ret;
}else {
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " ";
}
// System.out.println(ret);
}
int Tho = num / 1000;
num = num - Tho * 1000;
if(Tho != 0){
if(num == 0){ //若num为1000
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " ";
}
// System.out.println(ret);
}
ret = ret + GetStrOfThreeNumber(num);
return ret;
}
//用于获取三位数之内的字符
public String GetStrOfThreeNumber(int num){
String ret = "";
//百位数
int Hun = num / 100;
num = num - Hun * 100;
if(Hun != 0){
if(num == 0){ //若num 为100
ret = ret + Unit[Hun - 1] + " " + Big[0];
}else{
ret = ret + Unit[Hun - 1] + " " + Big[0] + " ";
}
}
//十位数及个位数:num
// 分三种大的情况:
// num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下)
// 10 < num <= 19; num ==> Tens[num - 10 - 1]
// 0 < num <= 10; num ==> Unit[num - 1]
if(num > 19){
if(num % 10 == 0) {
ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况
}else{ //非十倍整数的情况;
int Te = num / 10; //获取十位数(2 <= Te <= 9)
num = num - Te * 10;//获取个位数
ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1];
}
}else if(num > 10 && num <= 19){
ret = ret + Tens[num - 11];
}else if(num > 0 && num <= 10){
ret = ret + Unit[num -1];
}
return ret;
}
}
public class Integer_to_English_Words {
static public class Solution {
String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10
String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19
String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90}
String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000}
public String numberToWords(int num) {
String ret = "";
//特殊值0的情况
if(num == 0){
return "Zero";
}
int Bil = num / 1000000000;
num = num - Bil * 1000000000;
if(Bil != 0){
if(num == 0){ //若num为1000000000
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " ";
}
// System.out.println(ret);
}
int Mil = num / 1000000;
num = num - Mil * 1000000;
if(Mil != 0){
if(num == 0){ //若num为100000
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2];
return ret;
}else {
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " ";
}
// System.out.println(ret);
}
int Tho = num / 1000;
num = num - Tho * 1000;
if(Tho != 0){
if(num == 0){ //若num为1000
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " ";
}
// System.out.println(ret);
}
ret = ret + GetStrOfThreeNumber(num);
return ret;
}
//用于获取三位数之内的字符
public String GetStrOfThreeNumber(int num){
String ret = "";
//百位数
int Hun = num / 100;
num = num - Hun * 100;
if(Hun != 0){
if(num == 0){ //若num 为100
ret = ret + Unit[Hun - 1] + " " + Big[0];
}else{
ret = ret + Unit[Hun - 1] + " " + Big[0] + " ";
}
}
//十位数及个位数:num
// 分三种大的情况:
// num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下)
// 10 < num <= 19; num ==> Tens[num - 10 - 1]
// 0 < num <= 10; num ==> Unit[num - 1]
if(num > 19){
if(num % 10 == 0) {
ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况
}else{ //非十倍整数的情况;
int Te = num / 10; //获取十位数(2 <= Te <= 9)
num = num - Te * 10;//获取个位数
ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1];
}
}else if(num > 10 && num <= 19){
ret = ret + Tens[num - 11];
}else if(num > 0 && num <= 10){
ret = ret + Unit[num -1];
}
return ret;
}
}
public static void main(String [] args){
Solution S = new Solution();
int [] num = {1,12,88,123,1234,12345,123456,1234567,12345678,123456789,1234567891,0,10,20,100,1000,10000,100000,1000000000};
// 打印所有数组元素
for (int i = 0; i < num.length; i++) {
System.out.println(num[i] + ":" + S.numberToWords(num[i])+"D"); //用D来判断最后一个字母之后是否有空格的存在?
}
}
}
public class Integer_to_English_Words {
static public class Solution {
String [] Unit = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};// 0-10
String [] Tens = {"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",};//11-19
String [] Tens_x ={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};//{20,30,40,50,60,70,80,90}
String [] Big = {"Hundred","Thousand","Million","Billion"};//{100,1000,1000000,1000000000}
public String numberToWords(int num) {
String ret = "";
//特殊值0的情况
if(num == 0){
return "Zero";
}
int Bil = num / 1000000000;
num = num - Bil * 1000000000;
if(Bil != 0){
if(num == 0){ //若num为1000000000
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Bil) + " " + Big[3] + " ";
}
// System.out.println(ret);
}
int Mil = num / 1000000;
num = num - Mil * 1000000;
if(Mil != 0){
if(num == 0){ //若num为100000
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2];
return ret;
}else {
ret = ret + GetStrOfThreeNumber(Mil) +" " + Big [2] + " ";
}
// System.out.println(ret);
}
int Tho = num / 1000;
num = num - Tho * 1000;
if(Tho != 0){
if(num == 0){ //若num为1000
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1];
return ret;
}else{
ret = ret + GetStrOfThreeNumber(Tho) + " " + Big[1] + " ";
}
// System.out.println(ret);
}
ret = ret + GetStrOfThreeNumber(num);
return ret;
}
//用于获取三位数之内的字符
public String GetStrOfThreeNumber(int num){
String ret = "";
//百位数
int Hun = num / 100;
num = num - Hun * 100;
if(Hun != 0){
if(num == 0){ //若num 为100
ret = ret + Unit[Hun - 1] + " " + Big[0];
}else{
ret = ret + Unit[Hun - 1] + " " + Big[0] + " ";
}
}
//十位数及个位数:num
// 分三种大的情况:
// num > 19; num ==> Tens_x[num/10] + Unit[num - (num/10) * 10](个位数不为0的情况下)
// 10 < num <= 19; num ==> Tens[num - 10 - 1]
// 0 < num <= 10; num ==> Unit[num - 1]
if(num > 19){
if(num % 10 == 0) {
ret = ret + Tens_x[num / 10 - 2]; //十倍整数的情况
}else{ //非十倍整数的情况;
int Te = num / 10; //获取十位数(2 <= Te <= 9)
num = num - Te * 10;//获取个位数
ret = ret + Tens_x[Te - 2] + " " + Unit[num - 1];
}
}else if(num > 10 && num <= 19){
ret = ret + Tens[num - 11];
}else if(num > 0 && num <= 10){
ret = ret + Unit[num -1];
}
return ret;
}
}
public static void main(String [] args){
Solution S = new Solution();
int [] num = {1,12,88,123,1234,12345,123456,1234567,12345678,123456789,1234567891,0,10,20,100,1000,10000,100000,1000000000};
// 打印所有数组元素
for (int i = 0; i < num.length; i++) {
System.out.println(num[i] + ":" + S.numberToWords(num[i])+"D"); //用D来判断最后一个字母之后是否有空格的存在?
}
}
}
