首先得学会英语(我只能百度)
然后按1000 来读,注意20 以内直接读

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){
                     lists.add(NUMS[t % 100]);
                     t /= 100;
                     // 有百位
                     if(t % 10 != 0){
                         lists.add("and");
                         lists.add("hundred");
                         lists.add(NUMS[t % 10]);

                     }
                 }else{
                     // 有个位
                     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;
                 power++;
             }
             for(int i = lists.size() - 1; i >= 0; i--){
                 sb.append(lists.get(i) + " ");
             }
             System.out.println(sb.toString());
         }
     }   
}