题解 | #人民币转换#

人民币转换

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

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

unordered_map<int,string> dict={
    {1,"壹"},
    {2,"贰"},
    {3,"叁"},
    {4,"肆"},
    {5,"伍"},
    {6,"陆"},
    {7,"柒"},
    {8,"捌"},
    {9,"玖"},
    {10,"拾"},
    {11,"拾壹"},
    {12,"拾贰"},
    {13,"拾叁"},
    {14,"拾肆"},
    {15,"拾伍"},
    {16,"拾陆"},
    {17,"拾柒"},
    {18,"拾捌"},
    {19,"拾玖"}    
};

string func1(int num)
{
    if(num<20)
    {
        return dict[num];
    }
    else if(num<100)
    {
        if(num%10==0)            //个位数为0,即是10的整数倍
            return dict[num/10]+dict[10];
        else            //个位数不是0
            return dict[num/10]+dict[10]+func1(num%10);
    }
    else if(num<1000)
    {
        if(num%100==0)            //即百位数上不为0,但是十位数和个位数上都为0
            return dict[num/100]+"佰";
        else if(num%100 >= 10)                //即十位上的数字不为0
            return func1(num/100)+"佰"+func1(num%100);
        else            //即十位为零,且各位不为零
            return func1(num/100)+"佰零"+func1(num%100);
    }
    else if(num<10000)
    {
        if(num%1000==0)
            return func1(num/1000)+"仟";
        else if(num%1000 >= 100)        //即百位不为零
            return func1(num/1000)+"仟"+func1(num%1000);
        else
            return func1(num/1000)+"仟零"+func1(num%1000);
    }
    else if(num<100000000)
    {
        if(num%10000==0)
            return func1(num/10000)+"万";
        else if(num%10000 >= 1000)
            return func1(num/10000)+"万"+func1(num%10000);
        else
            return func1(num/10000)+"万零"+func1(num%10000);
    }
    else
    {
        if(num%100000000==0)
            return func1(num/100000000)+"亿";
        else if(num%100000000 >= 10000000)
            return func1(num/100000000)+"亿"+func1(num%100000000);
        else
            return func1(num/100000000)+"亿零"+func1(num%100000000);
    }    
}

void func2(string str)
{
    if(str == "00")
    {
        cout << "整";
        return;
    }
    if (str[0] > '0')
    {
        cout << dict[str[0]-'0'] << "角";
    }
    if (str[1] > '0')
    {
        cout << dict[str[1]-'0'] << "分";
    }
    return;    
}

int main()
{
    double num;
    cin>>num;
    string str=to_string(num);
    int index=str.find('.');
    string str1=str.substr(0,index),str2=str.substr(index+1);
    
    //输出人民币
    cout << "人民币";

    //输出元钱
    if(str[0]!='0')
    {
        cout<<func1(stoi(str))<<"元";   
    }

    //输出角分零钱
    func2(str2);
    
    return 0;
}
全部评论

相关推荐

wuwuwuoow:校友好 1.相关课程这行可以删了 2.个人呢技能多看看别人简历怎么写,好的直接抄下来 3.项目看起来可能是团队的圣遗物?有上线吗?QPS 为啥才 300?我想象这个业务应该不复杂,可以在简历中添加如果优化接口提高 QPS 的 4.日志记录做的太复杂了,要考虑目前你的项目体量,日志直接用 log.info 啥的记录就好了,写入到本地文件。引入了太多技术,带来太多复杂性。还有为什么日志需要回滚?日志需要有这么高要求的一致性吗 5.为什么用 MinIO 做冷数据存储?MinIO 更适合做对象存储,而 MySQL 是存储结构化数据,他们的定位是不一样的。如果要存冷数据,一般也是存到 MySQL 中。比如一个线上的 MySQL,和一个做冷数据的 MySQL,可以用上 MyISAM 引擎加快写入性能,甚至不写 MySQL 也行,直接写到文件中 不过我想的是这个场景中,每天真的有这么多数据吗?每天少说也得几万、几十万条数据增长,才考虑冷热数据分离。 6.SpringSecurity 用起来不容易,面试可以问的东西却很多,不建议在简历上写这个 7.不设置 Redis 缓存,假设出现了数据不一致,那该怎么办呢? 8.排版注意一下,比如 minio MinIO,Mysql MySQL 9.再加个项目,看看牛客别人怎么写的,可以写个轮子项目
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务