题解 | 学英语
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(scanner.hasNextLine()) { String line = scanner.nextLine(); int length = line.length() / 3; if(line.length() % 3 != 0) { length = length + 1; } String[] splits = new String[length]; int index = length - 1; /** * 请注意,不包括位置i的元素,所以是i > 0,不能是i >= 0 */ for(int i = line.length(); i > 0; i = i - 3) { if(i - 3 < 0) { splits[index] = line.substring(0,i); }else{ splits[index] = line.substring(i - 3,i); } index --; } StringBuilder[] sbs = new StringBuilder[splits.length]; for(int i = 0; i < sbs.length; i ++) { sbs[i] = new StringBuilder(); } Map<String,String> map = new HashMap<>(); map.put("0","zero"); map.put("1","one"); map.put("2","two"); map.put("3","three"); map.put("4","four"); map.put("5","five"); map.put("6","six"); map.put("7","seven"); map.put("8","eight"); map.put("9","nine"); map.put("10","ten"); map.put("11","eleven"); map.put("12","twelve"); map.put("13","thirteen"); map.put("14","fourteen"); map.put("15","fifteen"); map.put("16","sixteen"); map.put("17","seventeen"); map.put("18","eighteen"); map.put("19","nineteen"); Map<String,String> map1 = new HashMap<>(); map1.put("2","twenty"); map1.put("3","thirty"); map1.put("4","forty"); map1.put("5","fifty"); map1.put("6","sixty"); map1.put("7","seventy"); map1.put("8","eighty"); map1.put("9","ninety"); StringBuilder res = new StringBuilder(); for(int i = 0; i < splits.length; i ++) { String item = splits[i]; if(item.length() == 1) { String val = map.get(item); sbs[i].append(val); }else if(item.length() == 2) { if(item.charAt(0) == '1') { String val = map.get(item); sbs[i].append(val); }else if(item.charAt(0) >= '2') { sbs[i].append(map1.get(String.valueOf(item.charAt(0)))); if(item.charAt(1) != '0'){ sbs[i].append(" " + map.get(String.valueOf(item.charAt(1)))); } } }else if(item.length() == 3) { boolean flag = false; if(item.charAt(0) != '0') { sbs[i].append(map.get(String.valueOf(item.charAt(0))) + " hundred"); flag = true; } if(item.charAt(1) == '0') { if(item.charAt(2) != '0') { if(flag) { sbs[i].append(" and " + map.get(String.valueOf(item.charAt(2)))); }else{ sbs[i].append(map.get(String.valueOf(item.charAt(2)))); } } }else if(item.charAt(1) == '1') { String val = map.get(item.substring(1,item.length())); if(flag) { sbs[i].append(" and " + val); }else{ sbs[i].append(val); } }else if(item.charAt(1) >= '2') { if(flag) { sbs[i].append(" and " + map1.get(String.valueOf(item.charAt(1)))); }else{ sbs[i].append(map1.get(String.valueOf(item.charAt(1)))); } if(item.charAt(2) != '0'){ sbs[i].append(" " + map.get(String.valueOf(item.charAt(2)))); } } } if(splits.length - i == 4){ sbs[i].append(" billion"); }else if(splits.length - i == 3) { sbs[i].append(" million"); }else if(splits.length - i == 2) { sbs[i].append(" thousand"); } } for(int i = 0; i < sbs.length; i ++) { System.out.print(sbs[i] + " "); } } } }