基礎練習 數的讀法


問題描述
  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  基礎練習 數的讀法  
解題心得
這個題做起來個人感覺比較麻煩,幾乎花了3個小時,看了網上其他人做的,代碼比較短,但是我沒有看懂,還是堅持自己的思路,把它做完了,花時間多的主要原因是各種可能出現的
情況一開始沒有想的很清楚,沒有分好類就開始編碼導致的,還有一部分時間是花在了空格的處理上。
 
import java.util.Scanner;

public class Main {
    static String [] pinyin= {"ling","yi","er","san","si","wu","liu","qi","ba",
        "jiu","","shi","bai","qian","wan","yi"};//中間的一個空字符串為循環減少了判斷條件
    static String readNumber(String str,int e){//第二個參數表示這個輸入的數字是否大於8位數,因為大於4位數的中間的10讀法不同
        int [] a = new int[4];
        for(int i=0;i<4;i++){
            a[i] = Integer.parseInt(str.charAt(i)+"");
        }

        String read="";
        boolean flag=false;//是否出現非零數字
        int count=0;//零的個數
        for(int i=0;i<4;i++){
            if(a[i]!=0){
                if(count==2&&a[i]==1&&i==2){//處理10的問題
                    if(e==0)
                        read += " shi";
                    else
                        read = read + " yi shi";
                }
                else{
                    if(i!=3)
                         read = read  +" " +  pinyin[a[i]] + " " +pinyin[13-i] ;
                    else
                        read = read + " "  + pinyin[a[i]];
                }
                flag=true;
            }
            if(a[i]==0)
                count++;
            if(a[i]==0&&flag){
                int j=0;
                for(j=i;j<4;j++){
                    if(a[j]!=0)
                        break;
                }
                if(j!=4&&a[i-1]!=0){
                    read = read + " ling";
                }
            }
        }
        if(count==4&&e==0){
            read+="ling";
            return read;
        }
        return read.substring(1);
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string = in.next();
        int len=string.length();
        if(len<5){
            while (string.length()<4){
                string="0"+string;
            }
            System.out.println(readNumber(string,0));
            //readNumber(string);
        }
        else if(len>=5&&len<9){
            String str1 = string.substring(len-4,len);
            //System.out.println(str1);
            String str2 = string.substring(0,len-4);
            String result="";
            if(!str1.equals("0000")){
                if(str1.charAt(0)=='0'){
                    result = "ling " + readNumber(str1,1);
                }
                else {
                    result = readNumber(str1,1);
                }
            }
            while (str2.length()<4){
                str2 ="0" + str2;
            }
            System.out.println(readNumber(str2,0) + " wan " + result);
        }
        else {
            String str1 = string.substring(len-4,len);
            String str2 = string.substring(len-8,len-4);
            String str3 = string.substring(0,len-8);
            String result="";
            if(!str1.equals("0000")){
                if(str1.charAt(0)=='0'){
                    result = "ling " + readNumber(str1,1);
                }
                else {
                    result = readNumber(str1,1);
                }
            }
            if(!str2.equals("0000")){
                if(str2.charAt(0)=='0'){
                    result = "ling " + readNumber(str2,1) + " wan " + result;
                }
                else {
                    result = readNumber(str2,1) + " wan " + result;
                }
            }
            if(!str1.equals("0000")&&str2.equals("0000")&&str1.charAt(0)!='0'){
                result = "ling "  + result;
            }
            while (str3.length()<4){
                str3 ="0" + str3;
            }
            System.out.println(readNumber(str3,0) + " yi " + result );
        }

    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM