1、小于20的直接读数,如果个位和十位是0,则不需要读数(正百的100,例:one hundred);如果有百位读取百位,如果个位和十位是0,则不需要加and,否则需要加and,加hubdred,加百位 2、大于20的,依次添加个位,十位,百位;添加百位的时候,先加and,加hundred,加百位
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String[] NUMS = {"zero", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
String[] NUMSSHI = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
"sixty", "seventy", "eighty", "ninety"};
String[] POWER = {"", "hundred", "thousand", "million", "billion"};
while(in.hasNext()){
String line = in.nextLine();
StringBuilder sb = new StringBuilder();
ArrayList<String> lists = new ArrayList<>();
if(!line.matches("\\d+")){//如果匹配的不是数字
System.out.println("error");
}
int linenum = Integer.parseInt(line);
int power = 1;//单位
while(linenum != 0){
if(power != 1){
lists.add(POWER[power]);//添加单位
}
int t = linenum % 1000;//取低三位
//注意小于20,直接读
if(t % 100 <= 20){
if(t % 100 != 0){//十位和个位是零的话就不需要读数了
lists.add(NUMS[t % 100]);
}
if(t / 100 != 0){//有百位
if(t % 100 != 0){//十位和个位是零的话就不需要添加and了
lists.add("and");
}
lists.add("hundred");
lists.add(NUMS[t / 100]);
}
}else{//大于20
// 有个位
if(t % 10 != 0){
lists.add(NUMS[t % 10]);
}
t /= 10;
// 有十位
if(t % 10 != 0){
lists.add(NUMSSHI[t % 10]);
}
t /= 10;
// 有百位
if(t % 10 != 0){
lists.add("and");
lists.add("hundred");
lists.add(NUMS[t % 10]);
}
}
linenum /= 1000;//每次缩小1000倍
power++;//单位*1000
}
//添加的时候,先添加低位,读数的时候先读高位,倒着读
for(int i = lists.size() - 1; i >= 0; i--){
if(i!=0){
sb.append(lists.get(i) + " ");
}else{
sb.append(lists.get(i));//最后一个不加空格
}
}
System.out.println(sb.toString());
}
}
}