数字翻译-英文(java)

对于数字翻译,没啥难度,主要是对于细节的把握,话不多 说上代码;

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;

  }
}


猜你喜欢

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