题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigDecimal; import java.math.BigInteger; import java.text.DateFormat; import java.text.DecimalFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.function.Function; import java.util.function.IntFunction; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; import static java.util.Arrays.*; import static java.util.stream.Stream.*; public class Main { public static void main(String[] args) throws IOException { testTh(); } private static void testTh() throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String str; while ((str = bf.readLine()) != null) { String[] number = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; String[] tenth = {"", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; String[] tenRa = {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; String[] levelNumber = {"hundred", "thousand", "million", "billion", "and"}; StringBuilder stringBuilder = new StringBuilder(); if (str.length() <= 2) { String number1 = getNumberByStr(str, number, tenth, tenRa); stringBuilder.append(number1); System.out.println(stringBuilder.toString()); } else { int temp = (str.length() - 1) / 3; if (str.length() == 3) { String extracted = extracted(str, number, tenth, tenRa, levelNumber); System.out.println(extracted); } else if (temp == 1) { String str1 = str.substring(0, str.length() - 3); String str2 = str.substring(str.length() - 3); if (str1.length() <= 2) { String number1 = getNumberByStr(str1, number, tenth, tenRa); stringBuilder.append(number1).append(" ").append(levelNumber[1]).append(" "); String extracted = extracted(str2, number, tenth, tenRa, levelNumber); stringBuilder.append(extracted); System.out.println(stringBuilder.toString()); } else { String extracted = extracted(str1, number, tenth, tenRa, levelNumber); String s = stringBuilder.append(extracted).append(" ").append( levelNumber[temp]).append(" ").toString(); stringBuilder.delete(0, stringBuilder.length()); String ben = extracted(str2, number, tenth, tenRa, levelNumber); stringBuilder.append(s).append(ben); System.out.println(stringBuilder.toString()); } } else if (temp == 2) { String str1 = str.substring(0, str.length() - 6); String str2 = str.substring(str.length() - 6, str.length() - 3); String str3 = str.substring(str.length() - 3); if (str1.length() == 1) { String numberByStr = getNumberByStr(str1, number, tenth, tenRa); stringBuilder.append(numberByStr).append(" ").append( levelNumber[temp]).append(" "); } else { String extracted = extracted(str1, number, tenth, tenRa, levelNumber); stringBuilder.append(extracted).append(" ").append(levelNumber[temp]); } String extracted = extracted(str2, number, tenth, tenRa, levelNumber); stringBuilder.append(extracted).append(" ").append(levelNumber[temp - 1]).append(" "); String ben = extracted(str3, number, tenth, tenRa, levelNumber); stringBuilder.append(ben); System.out.println(stringBuilder.toString()); } } } } private static String extracted(String str, String[] number, String[] tenth, String[] tenRa, String[] levelNumber) { if (str.charAt(1) == '0' && str.charAt(2) == '0') { String substring = str.substring(0, 1); int parseInt = Integer.parseInt(substring); return number[parseInt] + " " + "hundred"; } else if (str.charAt(0) == '0' && str.charAt(1) == '0') { String substring = str.substring(2); int parseInt = Integer.parseInt(substring); return number[parseInt]; } else if (str.charAt(0) == '0') { String str_ = str.substring(1); return getNumberByStr(str_, number, tenth, tenRa); } else { String hundredNumberByStr = getHundredNumberByStr(0, levelNumber, number, str); str = str.substring(1); String number1 = getNumberByStr(str, number, tenth, tenRa); return hundredNumberByStr + " " + number1; } } //两位数 public static String getNumberByStr(String str, String[] number, String[] tenth, String[] tenRa) { if (str.length() == 1)return number[Integer.parseInt(str)]; if (str.charAt(1) == '0') { char c = str.charAt(0); return tenRa[Integer.parseInt(c + "")]; } if (str.charAt(0) == '1') { char c = str.charAt(1); return tenth[Integer.parseInt(c + "")]; } char c1 = str.charAt(0); char c2 = str.charAt(1); if (c1=='0')return number[Integer.parseInt(c2 + "")]; return tenRa[Integer.parseInt(c1 + "")] + " " + number[Integer.parseInt( c2 + "")]; } //百位数 public static String getHundredNumberByStr(Integer integer, String[] levelNumber, String[] number, String str) { String substring = str.substring(0, 1); int parseInt = Integer.parseInt(substring); return number[parseInt] + " " + levelNumber[integer] + " and"; } }