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




原文地址:https://www.cnblogs.com/zengguoqiang/p/8328254.html