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



京公网安备 11010502036488号