数字翻译--中文(java)

一些细节有待商讨,但这是目前本人认为最接近生活的翻译了:
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;
	
  }
}

猜你喜欢

转载自blog.csdn.net/qq_37422933/article/details/79440962