题解 | #阿拉伯数字转中文#

阿拉伯数字转中文

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;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
真烦好烦真烦:牛友太有实力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务