藍橋杯VIP試題 之 基礎練習 數的讀法 - JAVA

題目描述
Tom教授正在給研究生講授一門關於基因的課程,有一件事情讓他頗爲頭疼:一條染色體上有成千上萬個鹼基對,它們從0開始編號,到幾百萬,幾千萬,甚至上億。

比如說,在對學生講解第1234567009號位置上的鹼基時,光看着數字是很難準確的念出來的。

所以,他迫切地需要一個系統,然後當他輸入12 3456 7009時,會給出相應的念法:
十二億三千四百五十六萬七千零九
用漢語拼音表示爲
shi er yi san qian si bai wu shi liu wan qi qian ling jiu

這樣他只需要照着念就可以了。

你的任務是幫他設計這樣一個系統:給定一個阿拉伯數字串,你幫他按照中文讀寫的規範轉爲漢語拼音字串,相鄰的兩個音節用一個空格符格開。

注意必須嚴格按照規範,比如說“10010”讀作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”讀作“shi wan”而不是“yi shi wan”,“2000”讀作“er qian”而不是“liang qian”。

輸入
有一個數字串,數值大小不超過2,000,000,000。

輸出
是一個由小寫英文字母,逗號和空格組成的字符串,表示該數的英文讀法。

樣例輸入
1234567009

樣例輸出
shi er yi san qian si bai wu shi liu wan qi qian ling jiu


PS:1.連續零的處理,2."yi shi"和"shi"的處理, 3.千位非0時+"qian"等,這些問題能想到的做下特殊處理,再用測試數據測試下,基本上就沒什麼問題.

import java.util.Scanner;

public class  Main
{

	public static void main(String[] args) { 
		Scanner sc = new Scanner(System.in);
		String digit[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
        String n = sc.next();
	    int cnt = n.length()%4;
	    String tmp[] = {"0000","000","00","0"};
	    n = tmp[cnt]+n;   //把輸入的數字拼成4的整數倍長度
	    String res = "";
	    int zeroCount = 0;   //記錄連續0的個數
	    for(int i =4-cnt;i<n.length();i++) {//4-cnt可定位到輸入數字的第一位
	    	if(n.charAt(i) != '0') {	       
	            if(zeroCount>0 && i%4 != 0)//連續0,只讀出一個0
	            {	
	            	res += digit[0] + " ";	            	
	            }
	            zeroCount = 0;
	            //一位一位算  -- 千百十個
	            if(i%4==0)
	             	res += digit[n.charAt(i)-'0'] + " qian ";
	            else if(i%4==1)
	              	res += digit[n.charAt(i)-'0'] + " bai ";
	            else if(i%4==2)
	               	res += digit[n.charAt(i)-'0'] + " shi ";
	            else 
	               	res += digit[n.charAt(i)-'0'] + " ";
	       }
	       else{
	    	   zeroCount++;
	       }
	                   
	       //如果是萬
	       if(n.length() - i == 5 && zeroCount < 4)
	           	res += "wan ";
	       else if(n.length() - i == 9)//如果是億位
	           	res += "yi ";
	   }
	       //"yi shi"開頭的話要去掉"yi ",將字符串前三位移除並重新賦值
	       if(res.indexOf("yi shi") == 0)   
	    	   res = res.substring(3,res.length());
	       System.out.println(res);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章