题解 | #阿拉伯数字转中文#
阿拉伯数字转中文
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;
}
};
查看22道真题和解析