智能翻译
Description
某银行为了提高账户金额的可读性,需要将非负整数num转换为其对应的英文表示。
Input
输入数据的格式为: 数字num。(0≤num≤1000000000)
Output
输出的数据为数字的英文表示,英文表示不需要加and,不需要加"-",单词之间用空格隔开,如:One Hundred Twenty Three
Sample
代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static String s1[] = new String[]{"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
public static String s2[] = new String[]{"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
public static String s3[] = new String[]{"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
int n = Integer.valueOf(s);
if(n==1000000000){System.out.println("One Billion");return;}
if(n==0){System.out.println("Zero");return;}
String newString = "";
if(s.length()%3!=0) {
for (int k = 0; k < 3 - s.length() % 3; k++) {
newString += "0";
}
}
newString+=s;
String out = "";
//3 2 1
for(int i = newString.length()/3;i>=1;i--){
int beginIndex = (newString.length() / 3 - i) * 3;
String add = process(newString.substring(beginIndex,beginIndex+3));
out+=add;
if(i==3){
out+=" Million";
}else if(i==2&&(!add.equals(""))){
out+=" Thousand";
}
}
System.out.print(out.substring(1));
}
//三个数字处理
public static String process(String s){
if(s.equals("000")){
return "";
}
String c1 = String.valueOf(s.charAt(0));
String c2 = String.valueOf(s.charAt(1));
String c3 = String.valueOf(s.charAt(2));
String process1 = "";
if(c1.equals("0"));
else process1+= " "+s1[Integer.parseInt(c1)]+" Hundred";
if(c2.equals("0")){
process1+=(c3.equals("0")?"":" "+s1[Integer.parseInt(c3)]);
}else if(c2.equals("1")){
process1+=" "+s2[Integer.parseInt(c2+c3)-10];
}else {
process1+=" "+s3[Integer.parseInt(c2)-2]+(c3.equals("0")?"":" "+s1[Integer.parseInt(c3)]);
}
return process1;
}
}
思路
本题需要建立字符串数组保存信息,将字符串增补到长度为3的倍数;
同时需要考虑比如1000000,100000001,0等特殊情况;
oj写了半天才通过,小学知识忘完了