描述
Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文:

如22:twenty two,123:one hundred and twenty three。

说明:

数字为正整数,长度不超过九位,不考虑小数,转化结果为英文小写;

输出格式为twenty two;

非法数据请返回“error”;

关键字提示:and,billion,million,thousand,hundred。

本题含有多组输入数据。

输入描述:
输入一个long型整数

输出描述:
输出相应的英文写法

示例1
输入:
2356

输出:
two thousand three hundred and fifty six

代码

public class Huawei学英语 {

/**
* 从右到左是2位,三位三位...之间一个and
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String[] numstr = new String[]{null, "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
String[] teens = new String[]{null, null, "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
String[] points = new String[]{"", "thousand", "million", "billion"};
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str = br.readLine()) != null) {
char[] arr = str.toCharArray();
int len = arr.length;
StringBuilder sb = new StringBuilder();
for(int i = (len - 1) / 3; i >= 0; i--) {
int m = len - 1 - i * 3;
int h = m < 2 ? 0 : (arr[m - 2] - '0');
int t = (m < 1 ? 0 : ((arr[m - 1] - '0') * 10)) + arr[m] - '0';
if(h == 0 && t == 0) {
continue;
}
if(t == 0 && sb.length() > 0) {
sb.append(" and");
}
if(h > 0) {
sb.append(' ').append(numstr[h]).append(" hundred");
if(t > 0)
sb.append(" and");
}
if(t > 20) {
sb.append(' ').append(teens[t / 10]);
if(t % 10 > 0)
sb.append(' ').append(numstr[t % 10]);
} else if (t > 0) {
sb.append(' ').append(numstr[t]);
}
sb.append(' ').append(points[i]);
}
sb.deleteCharAt(0);
System.out.println(sb.toString());
}
}


/**
* 方法二
*
* @param num
* @return
*/
public static String parse(int num){
String[] numStr={"zero","one","two","three","four","five",
"six","seven","eight","nine","ten","eleven","twelve",
"thirteen","fourteen","fifteen","sixteen","seventeen",
"eighteen","ninteen"};
if(num>=0 && num<20){
return numStr[num];
}else if(num>=20 && num<100){
int a=num%10;
if(num<30){
return a !=0?"twenty "+parse(a):"twenty";
}else if(num<40){
return a !=0?"thirty "+parse(a):"thirty";
}else if(num<50){
return a !=0?"forty "+parse(a):"forty";
}else if(num<60){
return a !=0?"fifty "+parse(a):"fifty";
}else if(num<70){
return a !=0?"sixty "+parse(a):"sixty";
}else if(num<80){
return a !=0?"seventy "+parse(a):"seventy";
}else if(num<90){
return a !=0?"eighty "+parse(a):"eighty";
}else if(num<100){
return a !=0?"ninety "+parse(a):"ninety";
}
}else if(num>=100 && num<1000){
int x=num/100;
int y=num%100;
if(y!=0){
return parse(x)+" hundred"+ " and "+ parse(y);
}else{
return parse(x)+" hundred";
}
}
else if(num>=1000 && num<1000000){
int x=num/1000;
int y=num%1000;
if(y!=0){
return parse(x)+" thousand "+ parse(y);
}else{
return parse(x)+" thousand";
}
}else if(num>=1000000 && num<100000000){
int x=num/1000000;
int y=num%1000000;
if(y!=0){
return parse(x)+" million "+ parse(y);
}else{
return parse(x)+" million";
}
}
return "error";
}
}