7-23 幣值轉換


7-23 幣值轉換(20 分)

輸入一個整數(位數不超過9位)代表一個人民幣值(單位為元),請轉換成財務要求的大寫中文格式。如23108元,轉換后變成“貳萬叄仟壹百零捌”元。為了簡化輸出,用小寫英文字母a-j順序代表大寫數字0-9,用S、B、Q、W、Y分別代表拾、百、仟、萬、億。於是23108元應被轉換輸出為“cWdQbBai”元。

輸入格式:

輸入在一行中給出一個不超過9位的非負整數。

輸出格式:

在一行中輸出轉換后的結果。注意“零”的用法必須符合中文習慣。

輸入樣例1:

813227345

輸出樣例1:

iYbQdBcScWhQdBeSf

輸入樣例2:

6900

輸出樣例2:gQjB

 

  思路:輸出的時候采用整形數字來輸入,防止前導零(雖然好像沒有這個測試點),考慮輸入最小數字零,中間正常零
,以上都不是事。重點是不超過億,中間連續多個零這個測試點,我看了好幾個AC代碼的帖子,有一億零一輸出一億零零一
、然后還有第五位不管是不是零,萬必須輸出的。我都試了,然而沒軟用。調試到腦疼,看來我還是too young too naive。

 1 #include<stdio.h>
 2 #include<string>
 3 #include<sstream>
 4 #include<iostream>
 5 using namespace std;
 6 int main()
 7 {
 8     string money;
 9     cin >> money;
10 
11     int numb = atoi(money.c_str());
12     if (numb == 0) {         //特殊值為零的時候
13         cout << "a" << endl; return 0;
14     }
15     stringstream ss;        //取消前導零
16     ss << numb;
17     ss >> money;
18     string mcopy = money;
19     int len = money.length();
20 
21     for (int i = 0; i < money.length(); i++)
22     {
23         if (atoi(money.c_str()) == 0) break; //取消后導零
24 
25         switch (money[i])
26         {
27         case '0':if (mcopy[i - 1] != money[i] && i != 0)cout << "a";break;
28         case '1':cout << "b"; break;
29         case '2':cout << "c";  break;
30         case '3':cout << "d"; break;
31         case '4':cout << "e"; break;
32         case '5':cout << "f";  break;
33         case '6':cout << "g"; break;
34         case '7':cout << "h"; break;
35         case '8':cout << "i";  break;
36         case '9':cout << "j";  break;
37         }
38 
39         if (money[i] == '0') {        //第五位萬一定要輸出?????
40             
41             if (len == 5 && atoi(mcopy.c_str())<100000000)cout << "W";
42             len--; continue;
43         }
44         money[i] = '0';
45         switch (len)
46         {
47         case 2:cout << "S"; break;
48         case 3:cout << "B"; break;
49         case 4:cout << "Q"; break;
50         case 5:cout << "W"; break;
51         case 6:cout << "S"; break;
52         case 7:cout << "B"; break;
53         case 8:cout << "Q"; break;
54         case 9:cout << "Y"; break;
55 
56         }
57         len--;
58     }
59     cout << endl;
60     return 0;
61 }

既然看了帖子還是要有正確答案的

http://makaidong.com/andywenzhi/2101_3682628.html

 





免責聲明!

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



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