public class LearnEnglish {
    public static Map<Integer, String> map = new HashMap<Integer, String>() {
        {
            put(0, "zero");
            put(1, "one");
            put(2, "two");
            put(3, "three");
            put(4, "four");
            put(5, "five");
            put(6, "six");
            put(7, "seven");
            put(8, "eight");
            put(9, "nine");
            put(10, "ten");
            put(11, "eleven");
            put(12, "twelve");
            put(13, "thirteen");
            put(14, "fourteen");
            put(15, "fifteen");
            put(16, "sixteen");
            put(17, "seventeen");
            put(18, "eighteen");
            put(19, "nineteen");
            put(20, "twenty");
            put(30, "thirty");
            put(40, "forty");
            put(50, "fifty");
            put(60, "sixty");
            put(70, "seventy");
            put(80, "eighty");
            put(90, "ninety");
            put(100, "hundred");
            put(1000, "thousand");
            put(1000000, "million");
            put(1000000000, "billion");
        }
    };

    public static void main(String[] args) {
        Scanner sa = new Scanner(System.in);
        while (sa.hasNext()) {
            Integer n = sa.nextInt();
            List<Integer> list1 = new ArrayList<>();
            List<Integer> list2 = new ArrayList<>();
            while (n > 0) {
                Integer ll = n % 1000;
                Integer width = new Integer(1);
                String temp=String.valueOf(String.format("%03d",ll));
                char cs[]=temp.toCharArray();
                for(int i=cs.length-1;i>=0;i--){
                    list1.add(Integer.valueOf(String.valueOf(cs[i])));
                    list2.add(width);
                    width *= 10;
                }
                n /= 1000;
            }

            List<String> sb = new ArrayList<>();
            for (int i = 0; i < list1.size(); i++) {
                String temp;
                if (list2.get(i) > 10 && list1.get(i) != 0) {//百位
                    temp = map.get(list1.get(i)) + " " + map.get(list2.get(i));
                    sb.add(temp);
                } else if (list2.get(i) == 10 && list1.get(i) != 0) {//十位
                    if(i+1<list1.size()&&list1.get(i+1) == 0){
                        if(list1.get(i)>1){
                            temp = map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }else if(list1.get(i)==1&&i-1>=0&&list1.get(i-1)==0){//处理整数10
                            temp = map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }
                    }else{
                        if(list1.get(i)>1){
                            temp = "and " + map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }else if(list1.get(i)==1&&i-1>=0&&list1.get(i-1)==0){
                            temp = "and " + map.get(list1.get(i) * 10);
                            sb.add(temp);
                        }
                    }

                } else if (list2.get(i) == 1 && list1.get(i) != 0) {//个位
                    if(i+1<list1.size()&&list1.get(i+1) == 0){
                        temp ="and " +map.get(list1.get(i));
                    }else if(i+1<list1.size()&&list1.get(i+1) == 1){
                        temp ="and " +map.get(list1.get(i)+10);
                    }
                    else temp = map.get(list1.get(i));
                    sb.add(temp);
                }
                //加上千及以上的单位
                if (i == 2) {
                    sb.add(map.get(1000));
                } else if (i == 5) {
                    sb.add(map.get(1000000));
                } else if (i == 8) {
                    sb.add(map.get(1000000000));
                }
            }
            StringBuilder ss=new StringBuilder();
            for (int i = sb.size() - 1; i >= 0; i--) {
                if (i == sb.size() - 1) {
                    if (sb.get(i).equals("thousand") || sb.get(i).equals("million") || sb.get(i).equals("billion"))
                        continue;
                    else ss.append(sb.get(i) + " ");
                } else if (i == 0) ss.append(sb.get(i));
                else ss.append(sb.get(i) + " ");
            }
            String ofsd=ss.toString();
            String sub=ofsd.substring(0,ofsd.indexOf(" "));
            if(sub.equals("and"))System.out.println(ofsd.substring(ofsd.indexOf(" ")+1));
            else System.out.println(ofsd);
        }
    }
}

感觉就是个纯体力活,把所有边界条件通过调试一一完善就通过了,实在费时间,考试估计时间有点紧