题解 | #学英语#
学英语
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";
}
}