题解 | #人民币转换#
人民币转换
https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b
//思路,四位四位处理,字符串处理速度快
#include <iostream>
#include<vector>
using namespace std;
vector<string> nums{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
void printnum(int a) {
cout << nums[a];
}
void printn(string s) {
int n = s.length();
if (n == 1) {
printnum(s[0] - '0');
return;
}
int zeroflag = 0;
for (int i = 0; i < n; i++) {
int a = s[i] - '0';
if (a != 0) {
if (zeroflag)cout << "零";
if (n - i == 2 && a == 1) {}//“拾”不是“壹拾”的处理
else printnum(a);
zeroflag = 0;
} else {
zeroflag = 1;
}
if (n - i == 4)cout << "仟";
if (n - i == 3 && a != 0)cout << "佰";
if (n - i == 2 && a != 0)cout << "拾";
}
}
int main() {
string s;
while (cin >> s) { // 注意 while 处理多个 case
int count = 0;
int l = s.length();
//int p = s.find('.');
int p = l-3;//小数部分固定2位
string zheng = s.substr(0, p);
string xiao = s.substr(p + 1, l);
int zhengl = zheng.length();
int i = 0;
cout << "人民币";
if (zhengl > 8) {
printn(zheng.substr(i, zhengl - 8));
cout << "亿";
i += zhengl - 8;//后移4位
}
if (zhengl > 4) {
printn(zheng.substr(i, zhengl - 4));
cout << "万";
i += zhengl - 4;//后移4位
}
if (zheng != "0") {
printn(zheng.substr(i, zhengl));
cout << "元";
}
if (xiao == "00") {
cout << "整" << endl;
return 0;
} else {//小数部分处理
if (xiao[0] - '0' != 0) {
printnum(xiao[0] - '0');
cout << "角";//0跳过输出
}
if (xiao[1] - '0' != 0) {
printnum(xiao[1] - '0');
cout << "分";
}
}
}
}
// 64 位输出请用 printf("%lld")

查看22道真题和解析