數的讀法 C++實現
阿新 • • 發佈:2019-01-10
問題描述 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
程式程式碼:
#include <bits/stdc++.h> using namespace std; int main() {string t,s[11]={"",""," shi"," bai"," qian"," wan"," shi"," bai"," qian"," yi"," shi"}; string s1[10]={"","yi","er","san","si","wu","liu","qi","ba","jiu"}; int a[11]={0}; int i,j,k; //輸入數字串 cin>>t; for(i=t.length()-1,j=1;i>=0;i--,j++) a[j]=(int)t[i]-48; //a[1]是個位 //判斷輸出a k=j=j-1; while(j>=1) { if(a[j]==0) { if(j==9&&k>9) cout<<"yi "; else if(j==5&&k<9&&k>5) cout<<"wan "; j=j-1; continue;} else if(k==10&&k==j) cout<<s1[a[j]]<<s[j]<<" "; else if((k==2||k==6||k==10)&&k==j) cout<<s[j].substr(1); else if(a[j+1]==0&&a[j]!=0&&j!=k) cout<<" ling "<<s1[a[j]]<<s[j]; else {if(j==k) cout<<s1[a[j]]<<s[j]; else cout<<' '<<s1[a[j]]<<s[j];} j--; }//while return 0; }