1. 程式人生 > >數的讀法 C++實現

數的讀法 C++實現

//程式有點亂,希望能理解

問題描述  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;
}