对于数字翻译,没啥难度,主要是对于细节的把握,话不多 说上代码;
import java.text.DecimalFormat;
import java.util.Scanner;
public class $数字翻译_整形 {
public static void main(String[] args) {
int a;
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
if (a >= 2147483647) { // int 最大值 2147483647
System.out.println("溢出!");
return;
}
System.out.println(transNum(a));
System.out.println(format_int(a));
sc.close();
}
public static String format_int(int a) { //将数字转化成 三位划分 用于验证答案
DecimalFormat df1 = (DecimalFormat) DecimalFormat.getInstance();
df1.setGroupingSize(3);
return df1.format(a);
}
public static String transNum(int a){ //第一级分类
if(a<0) return "minus "+transNum(-a); //负数处理
else if(a<10) return trans0_9(a);
else if(a<20) return trans10_19(a);
else if (a<100) return trans20_99(a);
else if(a<1000) return trans100_999(a);
else if(a<2147483647) return trans1000_(a);
else return "<说你溢出就溢出>溢出!!";
}
public static String trans0_9(int a){ //二级分类 0-9
switch(a){
case 0: return"zero" ;
case 1: return"one" ;
case 2: return"two" ;
case 3: return"three" ;
case 4: return"four" ;
case 5: return"five" ;
case 6: return"six" ;
case 7: return"seven" ;
case 8: return"eight" ;
case 9: return"nine" ;
default: return "" ;
}
}
public static String trans10_19(int a){ //二级分类 10-19
switch(a){
case 10: return"ten" ;
case 11: return"eleven" ;
case 12: return"twelve" ;
case 13: return"thirteen" ;
case 14: return"fourteen" ;
case 15: return"fifteen" ;
case 16: return"sixteen" ;
case 17: return"seventeen" ;
case 18: return"eighteen" ;
case 19: return"nineteen" ;
default: return "" ;
}
}
public static String trans20_99(int n){ //二级分类20-99
int a,b;
b=n%10; a=n/10;
String temp="";
if(b!=0) temp="-"+trans0_9(b);
switch(a){
case 2: return"twenty"+temp ;
case 3: return"thirty"+temp ;
case 4: return"forty"+temp ;
case 5: return"fifty"+temp ;
case 6: return"sixty"+temp ;
case 7: return"seventy"+temp ;
case 8: return"eighty"+temp ;
case 9: return"ninety"+temp ;
default: return "" ;
}
}
public static String trans0_99(int n){ //三级分类 ;用于3位及以上位数的最后两位翻译
if(n<10) return trans0_9(n);
else if (n<20) return trans10_19(n);
else if (n<100) return trans20_99(n);
else return "<0-99> 溢出!";
}
public static String trans100_999(int n){ //二级分类 100-999
int a,b,c;
String hun="hundred";
a=n/100;b=(n-a*100)/10; c=n%10;
if ((b+c)!=0) hun+=" and ";
return trans0_9(a)+" "+hun+trans0_99(n-a*100);
}
public static String trans0_999(int n){ //三级分类 ;用于4位及以上位数的最后三位翻译
if(n<100) return "and "+trans0_99(n); //百位为0 ,千位与十位或个位中间加 and
int a,b,c;
String hun="hundred";
a=n/100;b=(n-a*100)/10; c=n%10;
if ((b+c)!=0) hun+=" and ";
return trans0_9(a)+" "+hun+trans0_99(n-a*100);
}
public static String transXXX(int n){ //san级分类 ;用于4位及以上位数的非最后三位翻译
if(n<100) return trans0_99(n);
int a,b,c;
String hun="hundred";
a=n/100;b=(n-a*100)/10; c=n%10;
if ((b+c)!=0) hun+=" and ";
return trans0_9(a)+" "+hun+trans0_99(n-a*100);
}
public static String trans1000_(int a){ //二级分类 1000以上
int[] arr = ToArray(a);
if (arr[0] < 4)
return trans0_999(a);
else if (arr[0] < 7)
return transXXX(arr[6] * 100 + arr[5] * 10 + arr[4]) + " thousand "
+ trans0_999(arr[3] * 100 + arr[2] * 10 + arr[1]);
else if (arr[0] < 10)
return transXXX(arr[9] * 100 + arr[8] * 10 + arr[7]) + " million "
+ transXXX(arr[6] * 100 + arr[5] * 10 + arr[4]) + " thousand "
+ trans0_999(arr[3] * 100 + arr[2] * 10 + arr[1]);
else if (arr[0] < 13)
return transXXX(arr[12] * 100 + arr[11] * 10 + arr[10]) + " billion "
+ transXXX(arr[9] * 100 + arr[8] * 10 + arr[7]) + " millon "
+ transXXX(arr[6] * 100 + arr[5] * 10 + arr[4]) + " thousand "
+ trans0_999(arr[3] * 100 + arr[2] * 10 + arr[1]);
else
return "溢出!!严重溢出!!";
}
//吧大数字转为一维数组
public static int[] ToArray(int a ){ //arr[0] 记录为几位数;arr[1]个位数...
int[] arr = new int[13];
int i = 1;
arr[0] = 0;
while (a != 0) {
arr[i] = a % 10;
a /= 10;
i++;
arr[0]++;
}
return arr;
}
}