题解 | #学英语#
学英语
http://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
从字符串的角度出发,用的是最简单的数据结构,简单易懂
public class Main {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
while (scn.hasNext())
{
String str = scn.next();
String s = ""; //以三位为一段从后往前取子串
String result = "";
int i = str.length();
int flag = 0;//flag用于记录计数单位
do
{
int start, end;
start = (i - 3) < 0 ? 0 : (i - 3);
end = i;
i = i -3;
s = str.substring(start,end);
String temp = "";
//分别str的长度1,2,3讨论
if(s.length() == 1)
{
switch (s.charAt(0))
{
case '1':temp += "one ";break;
case '2':temp += "two ";break;
case '3':temp += "three ";break;
case '4':temp += "four ";break;
case '5':temp += "five ";break;
case '6':temp += "six ";break;
case '7':temp += "seven ";break;
case '8':temp += "eight ";break;
case '9':temp += "nine ";break;
}
}
else if (s.length() == 2)
{
//十位是一需要特殊考虑
if (s.charAt(0) == '1')
{
switch (s)
{
case "10":temp += "ten ";break;
case "11":temp += "eleven ";break;
case "12":temp += "twelve ";break;
case "13":temp += "thirteen ";break;
case "14":temp += "fourteen ";break;
case "15":temp += "fifteen ";break;
case "16":temp += "sixteen ";break;
case "17":temp += "seventeen ";break;
case "18":temp += "eighteen ";break;
case "19":temp += "nineteen ";break;
}
}
else
{
switch (s.charAt(0))
{
case '2':temp += "twenty ";break;
case '3':temp += "thirty ";break;
case '4':temp += "forty ";break;
case '5':temp += "fifty ";break;
case '6':temp += "sixty ";break;
case '7':temp += "seventy ";break;
case '8':temp += "eighty ";break;
case '9':temp += "ninety ";break;
}
switch (s.charAt(1))
{
case '1':temp += "one ";break;
case '2':temp += "two ";break;
case '3':temp += "three ";break;
case '4':temp += "four ";break;
case '5':temp += "five ";break;
case '6':temp += "six ";break;
case '7':temp += "seven ";break;
case '8':temp += "eight ";break;
case '9':temp += "nine ";break;
}
}
}
else if((s.length() == 3))
{
switch (s.charAt(0))
{
case '1':temp += "one hundred ";break;
case '2':temp += "two hundred ";break;
case '3':temp += "three hundred ";break;
case '4':temp += "four hundred ";break;
case '5':temp += "five hundred ";break;
case '6':temp += "six hundred ";break;
case '7':temp += "seven hundred ";break;
case '8':temp += "eight hundred ";break;
case '9':temp += "nine hundred ";break;
}
if (s.substring(1).equals("00"))
{
;
}
else
{
//当不为整百数时,才需要加”and“
if (s.charAt(0) != '0')
{
temp += "and ";
}
if (s.charAt(1) == '0')
{
switch (s.charAt(2))
{
case '1':temp += "one ";break;
case '2':temp += "two ";break;
case '3':temp += "three ";break;
case '4':temp += "four ";break;
case '5':temp += "five ";break;
case '6':temp += "six ";break;
case '7':temp += "seven ";break;
case '8':temp += "eight ";break;
case '9':temp += "nine ";break;
}
}
else
{
if (s.charAt(1) == '1')
{
switch (s.substring(1))
{
case "10":temp += "ten ";break;
case "11":temp += "eleven ";break;
case "12":temp += "twelve ";break;
case "13":temp += "thirteen ";break;
case "14":temp += "fourteen ";break;
case "15":temp += "fifteen ";break;
case "16":temp += "sixteen ";break;
case "17":temp += "seventeen ";break;
case "18":temp += "eighteen ";break;
case "19":temp += "nineteen ";break;
}
}
else
{
switch (s.charAt(1))
{
case '2':temp += "twenty ";break;
case '3':temp += "thirty ";break;
case '4':temp += "forty ";break;
case '5':temp += "fifty ";break;
case '6':temp += "sixty ";break;
case '7':temp += "seventy ";break;
case '8':temp += "eighty ";break;
case '9':temp += "ninety ";break;
}
switch (s.charAt(2))
{
case '1':temp += "one ";break;
case '2':temp += "two ";break;
case '3':temp += "three ";break;
case '4':temp += "four ";break;
case '5':temp += "five ";break;
case '6':temp += "six ";break;
case '7':temp += "seven ";break;
case '8':temp += "eight ";break;
case '9':temp += "nine ";break;
}
}
}
}
}
//flag用于记录计数单位
switch (flag )
{
case 0:;break;
case 1:temp += "thousand ";break;
case 2:temp += "million ";break;
case 3:temp += "billion ";break;
}
flag++;
result = temp + result;
}while (i > 0);
System.out.println(result);
}
}
}