學英語

/*

描述	
Jessi初學英語,爲了快速讀出一串數字,編寫程序將數字轉換成英文:
如22:twenty two,123:one hundred and twenty three。
 
說明:
數字爲正整數,長度不超過十位,不考慮小數,轉化結果爲英文小寫;
輸出格式爲twenty two;
非法數據請返回“error”;
關鍵字提示:and,billion,million,thousand,hundred。
 
方法原型:public static String parse(long num) 
 
 
 
知識點	字符串,循環,函數,指針,枚舉,位運算,結構體,聯合體,文件操作,遞歸
運行時間限制	10M
內存限制	128
輸入	
輸入一個long型整數
輸出	
輸出相應的英文寫法
樣例輸入	2356
樣例輸出	two thousand three hundred and fifty six

*/


import java.util.Scanner;

public class Main {

	public static void main(String args[])
	{
		Scanner sca = new Scanner(System.in);

		String str = sca.next();
		sca.close();
		
		if(!str.matches("0|[1-9][0-9]*"))
		{
			return;
		}
		long number = Long.parseLong(str);
		if(number > 9999999999L)
		{
			return;
		}
		System.out.println(parse(number));
	}
	
	public static String parse(long num) 
	{
		String temp = Long.toString(num);
		String english = "";
		int n = 0;
		if(temp.length()%3 == 0)
		{
			n = temp.length()/3;
		}
		else
		{
			n = temp.length()/3 + 1;
		}
		
		String[] str = new String[n];
		for(int i = 0; i < n; i++)
		{
			if(i != n-1)
				str[i] = temp.substring(temp.length()-(i+1)*3,temp.length()-i*3);
			else
				str[i] = temp.substring(0,temp.length()-i*3);
			
		}
		
		for(int i = n-1; i >= 0; i--)
		{
			english += word(str[i],i+1);
		}
		
		return english;
	}
	
	public static String word(String num,int symbol)
	{
		int number = Integer.parseInt(num);
		String english = "";
		
		String[] unit = {"","one","two","three","four","five","six","seven","eight","nine"};
		String[] ten = {"","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","ninteen"};
		String[] decade = {"","ten","twenty","thrity","forty","fifty","sixty","seventy","eighty","ninety"};
		
		switch(num.length())
		{
		case 1:
			english = unit[number];
			break;
		case 2:
			if(number%10 != 0)
			{
				if(number/10 != 1)
					english = decade[number/10]+" "+unit[number%10];
				else
					english = ten[number%10];
			}
			else
				english = decade[number/10];
			break;
		case 3:
			if(number/100 != 0)
			{
				if(number%100 != 0)
					english = unit[number/100]+" hundred and "+ word(Integer.toString(number%100),1);
				else 
					english = unit[number/100]+" hundred";
			}
			else
			{
				if(number%100 != 0)
					english = "and "+word(Integer.toString(number%100),1);
			}
			
			break;
		}
		switch(symbol)
		{
		case 1:
			break;
		case 2:
			if(number != 0)
				english += " thousand ";
			break;
		case 3:
			if(number != 0)
				english += " million ";
			break;
		case 4:
			if(number != 0)
				english += " billion ";
			break;
		}
		return english;
	}
}
寫這個的時候腦細胞死了一大堆啊……
發佈了38 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章