题解 | #人民币转换#
人民币转换
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")