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); } } }
感觉就是个纯体力活,把所有边界条件通过调试一一完善就通过了,实在费时间,考试估计时间有点紧