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代码
#include <iostream>
using namespace std;
int main() {
int Mon;
cin >> Mon; //不超过9位的数字 因而用int可以处理
if (!Mon) { cout << "a" << endl; return 0; }
int Power = 100000000, flag = 0, cnt = 9; //cnt记录位数
while (Mon / Power == 0) {
Mon = Mon % Power;
Power /= 10;
cnt--;
} //此循环结束得到Mon / Power大于0的结果
int Mark = 1;
while (Mon) {
char Judge = 'a' + Mon / Power;
if (Judge == 'a' && Mark == 1) {
Mark = 0; //用来防止中间连续输出多个0
if (cnt == 5) cout << 'W';
cout << Judge;
}
if (Mon / Power) {
cout << Judge;
Mark = 1; //解除中间连续多个0
if (cnt == 9) cout << 'Y';
else if (cnt == 5) cout << 'W'; //万及以下时情况的处理
else if (cnt == 4) cout << 'Q';
else if (cnt == 3) cout << 'B';
else if (cnt == 2) cout << 'S';
else if (cnt == 6) cout << 'S'; //十万及以上时情况的处理
else if (cnt == 7) cout << 'B';
else if (cnt == 8) cout << 'Q';
}
Mon = Mon % Power; //舍弃处理完毕的最高位
Power /= 10; //减少量级
cnt--; //减少位数
}
if (cnt > 4 && cnt < 8) cout << 'W'; //在十万及以上时已经后续位数全部为零
return 0; //cnt在自减后跳出 在这里自动补万
}