题解 | #人民币转换#

人民币转换

https://www.nowcoder.com/practice/00ffd656b9604d1998e966d555005a4b

#include <iostream>
using namespace std;
#include <string>
#include <list>

string n2c(int num) {
    string res;
    switch (num) {
        case 0:
            res = "零";
            break;
        case 1:
            res = "壹";
            break;
        case 2:
            res = "贰";
            break;
        case 3:
            res = "叁";
            break;
        case 4:
            res = "肆";
            break;
        case 5:
            res = "伍";
            break;
        case 6:
            res = "陆";
            break;
        case 7:
            res = "柒";
            break;
        case 8:
            res = "捌";
            break;
        case 9:
            res = "玖";
            break;
    }
    return res;
}

string cnt2w(int cnt) {
    string res;
    switch (cnt) {
        case 1:
            res = "拾";
            break;
        case 2:
            res = "佰";
            break;
        case 3:
            res = "仟";
            break;
        case 4:
            res = "万";
            break;
        case 5:
            res = "拾";
            break;
        case 6:
            res = "佰";
            break;
        case 7:
            res = "仟";
            break;
        case 8:
            res = "亿";
            break;
    }
    return res;
}
int main() {
    string num, li;
    getline(cin, num, '.');
    getline(cin, li);
    list<string> out;
    if (li == "00") {
        out.push_front("整");
    } else {
        int a = li[1] - '0';
        int b = li[0] - '0';
        if (a != 0) {
            out.push_front("分");
            out.push_front(n2c(a));
        }

        if (b != 0) {
            out.push_front("角");
            out.push_front(n2c(b));
        }
    }
    if (num != "0") {
        out.push_front("元");
        bool flag = false;
        if (num[num.size() - 1] != '0') {
            int t = num[num.size() - 1] - '0';
            out.push_front(n2c(t));
            flag = true;
        }
        int cnt = 1;

        for (int i = num.size() - 2; i >= 0; i--) {
            if (cnt == 4) {
                out.push_front(cnt2w(cnt));
                flag = false;
            }
            if (num[i] == '0') {
                if (cnt <= 6 && flag) {
                    out.push_front("零");
                    flag = false;
                }
            } else {
                flag = true;
                int t = num[i] - '0';
                if (cnt != 4) {
                    out.push_front(cnt2w(cnt));
                }

                if (!(out.front() == "拾" && t == 1)) {
                    out.push_front(n2c(t));
                }
            }
            cnt++;
        }
    }

    cout << "人民币";
    for (auto s : out) {
        cout << s;
    }
}

设了一个计数器算位数,在符合位数的0开头加0,若达到“万”级别则打印万

要注意0.12这样的状态,不一定有“元”

用例是double,最多到亿,所以亿不需要固定打印

感觉这个方法还是很笨,如果要优化的话,应该是4位为一个单位,里面循环十百千,外面是万 亿 兆

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务