题解 | #阿拉伯数字转中文#
阿拉伯数字转中文
https://www.nowcoder.com/practice/6eec992558164276a51d86d71678b300
#include <string> #include <vector> class Solution { public: vector<string> getChinaNum(string arab_num) { vector<string> unit{"", "十" , "百", "千"}; vector<string> number{"零","一","二","三","四","五","六","七","八","九"}; vector<string> res{}; for (int i = 0; i < arab_num.size(); i++) { // 连续两个零,则跳过 if (arab_num[i] == '0' && i > 0 && arab_num[i - 1] == '0') continue; if (arab_num[i] == '0') { // 零不用添加单位 res.push_back(number[0]); }else {// 正常处理 res.push_back(unit[i]); res.push_back(number[arab_num[i] - '0']); } } // 11 => 十一 而不是 一十一 if (arab_num.size() == 2 && arab_num[1] == '1') res.pop_back(); reverse(res.begin(), res.end()); // 10 => 十 而不是 十零 if (res[res.size() - 1] == "零" && res.size() != 1) res.pop_back(); return res; } string num2cn(int n) { if (n == 0) return "零"; int sign = 1; // 处理负数 if (n < 0){ sign = -1; n = -1 * n; } string num_str = to_string(n); // 反转一下比较好处理 reverse(num_str.begin(), num_str.end()); vector<vector<string>> str_ver; // 四个数一组地处理,最大单位为千 for (int i = 0; i < num_str.size(); i += 4) { str_ver.push_back(getChinaNum(num_str.substr(i,4))); } // 拼接结果,再加上更大地单位万、亿 string res{}; vector<string> unit{"", "万", "亿"}; for (int i = 0; i < str_ver.size(); i++) { string cur{}; // 跳过零 if (str_ver[i].size() == 1 && str_ver[i][0] == "零") continue; // 正常拼接 for (string& s : str_ver[i]) { cur += s; } cur += unit[i]; res = cur + res; } return sign == -1 ? "负" + res : res; } };