一些细节有待商讨,但这是目前本人认为最接近生活的翻译了:
import java.text.DecimalFormat;
import java.util.Scanner;
public class $数字翻译_整形2 {
public static void main(String[] args) {
int a;
Scanner sc =new Scanner(System.in);
a=sc.nextInt();
if(a>=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(4);
return df1.format(a);
}
public static String transNum(int a){ //一级划分
if (a < 0)
return "负 " + 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 < 10000)
return trans999_9999(a);
// else if(a<100000) return trans9999_99999(a);
else if (a < 2147483647)
return trans1000_(a);
else
return "<说你溢出就溢出>溢出!!";
}
public static String trans0_9(int a){ //二级分类0-9
switch(a){
case 0: return"零" ;
case 1: return"一" ;
case 2: return"二" ;
case 3: return"三" ;
case 4: return"四" ;
case 5: return"五" ;
case 6: return"六" ;
case 7: return"七" ;
case 8: return"八" ;
case 9: return"九" ;
default: return "" ;
}
}
public static String trans0_9liang(int a){ //一般200读作贰佰两百都可以 但2000一般读作两千
switch(a){
//case 0: return"零" ;
case 1: return"一" ;
case 2: return"两" ;
case 3: return"三" ;
case 4: return"四" ;
case 5: return"五" ;
case 6: return"六" ;
case 7: return"七" ;
case 8: return"八" ;
case 9: return"九" ;
default: return "" ;
}
}
public static String trans10_19(int a){
a-=10;
if(a==0 ) return "十";
else return "十"+trans0_9(a);
}
public static String trans20_99(int n){
int a,b;
b=n%10; a=n/10;
String temp="";
if(b!=0) temp=""+trans0_9(b);
return trans0_9(a)+""+"十"+temp;
}
public static String trans0_99(int n){
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){
int a,b,c;
String hun="百";
a=n/100;b=(n-a*100)/10; c=n%10;
if ((b+c)==0)
return trans0_9(a)+"百";
return trans0_9(a)+"百"+trans0_99(n-a*100);
}
public static String trans0_999(int n){
if(n<10) return trans0_99(n);
if(n<100) return "零"+trans0_99(n);
int a,b,c;
a=n/100;b=(n-a*100)/10; c=n%10;
if ((b+c)==0) return trans0_9(a)+"百";
return trans0_9(a)+"百"+trans0_99(n-a*100);
}
public static String trans999_9999(int n){ //千
if(n<100) return trans0_99(n);
int a,b;
a=n/1000;b=(n-a*1000);
if(b==0) return trans0_9liang(a)+"千";
return trans0_9liang(a)+"千"+trans0_999(b);
}
public static String trans0_9999(int n){ //千
if(n==0) return "";
if(n<100) return trans0_99(n);
if(n<1000) return "零"+trans0_999(n);
else
return trans999_9999(n);
}
public static String trans_XXXX(int n){ //非最后四位数
if(n==0) return "";
if(n<10) return trans0_9liang(n);
if(n<20) return trans10_19(n);
if(n<100) return trans20_99(n);
if(n<1000) return trans0_999(n);
else
return trans999_9999(n);
}
/*
public static String trans9999_99999(int n){ //万
int a,b;
String hun="万";
a=n/10000;b=(n-a*10000);
return trans0_9(a)+" 万1"+trans0_9999(n-a*1000);
}
public static String trans0_99999(int n){ //万
if(n<10000) return "零"+trans0_9999(n);
return trans9999_99999(n);
}
*/
public static String trans1000_(int a){
int []arr=ToArray(a);
if(arr[0]<9) return trans_XXXX(arr[8]*1000+arr[7]*100+arr[6]*10+arr[5]) + "万 "+ trans0_9999(arr[4]*1000+arr[3]*100+arr[2]*10+arr[1]); //万
else if(arr[0]>=9) {
if(arr[8]+arr[7]+arr[6]+arr[5]==0)
return trans_XXXX(arr[10]*10+arr[9]) +"亿 "+ trans0_9999(arr[4]*1000+arr[3]*100+arr[2]*10+arr[1]); //亿
return trans_XXXX(arr[10]*10+arr[9]) +"亿 "+trans_XXXX(arr[8]*1000+arr[7]*100+arr[6]*10+arr[5]) +"万"+ trans0_9999(arr[4]*1000+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;
}
}