leetcode(15):华为HJ95||人民币转换

1. 题目描述

题目描述

考试题目和要点:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分)

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分)

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(

知识点 字符串
运行时间限制 10M
内存限制 128
输入

输入一个doulbe数
输出

输出人民币格式

注:

下面乱码为:

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
样例输入 151121.15
样例输出 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分

2. 实现代码

该题不算很难,但是很麻烦;下面是基于C++实现的
有个java实现的比较精妙:传送门
C++的没有找到

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
string ProcessInt(int n);//
void ProcessW(string ZS, string XS,int i,bool isb);//处理整数
void ProcessXS(string XS, int i);//处理小数

void ProcessXS(string XS, int i)
{
    switch (i) //只存在 角 分 和 整的情况
    {
    case 2:

             if(XS[0] == '0' && XS[1] == '0')
             {
                 cout<<"整";
                 break;
             }
             else{
                 cout<<ProcessInt(XS[0]-'0');
                 cout<<"角";
                 ProcessXS(XS.substr(1,1), 1);
             }
        break; 
    case 1:
        if(XS[0] == '0')
        {cout<<"整";break;}
        else   
                {
                    cout<<ProcessInt(XS[0]-'0');
                    cout<<"分";
                }

        break;
    defaut:
    
 
                 
        break;
    }
}


void ProcessW(string ZS, string XS,int i,bool isb)
{
    if(i==0 && isb)
    {
        cout<<"元";
        ProcessXS(XS ,XS.size()>2?2:XS.size());
    }else 
    if (ZS.size()>8 )//亿
    {
       ProcessW(ZS.substr(0,ZS.size()-8),XS , ZS.size()-8,false);
       cout<<"亿";
       ProcessW(ZS.substr(ZS.size()-8,8),XS ,8,false);
    }else
     if(ZS. size()>4 )
    {
        ProcessW(ZS.substr(0,ZS.size()-4),XS , ZS.size()-4,false);
        cout<<"万";
        ProcessW(ZS.substr(ZS.size()-4,4),XS ,4,true);//处理完 4位以上的 就只有四位一下的
    }else
    if(ZS.size() == 4)
    {
        cout<<ProcessInt((ZS[0]-'0'));//char转int
        cout<<"仟";
        ProcessW(ZS.substr(ZS.size()-3,3),XS , 3,isb);
    }else if(ZS.size() == 3)
    {

        cout<<ProcessInt((ZS[0]-'0'));//char转int

        cout<<"佰";
        ProcessW(ZS.substr(1,2),XS , 2,isb);
    }else if(ZS.size() == 2)
    {
        if(ZS[0] != '1')
            cout<<ProcessInt((ZS[0]-'0'));//char转int
        cout<<"拾";
        ProcessW(ZS.substr(1,2),XS , 1,isb);
    }
    else if(ZS.size()  == 1)
    {
        cout<<ProcessInt(stoi(ZS));
        if(isb)
            ProcessW("0",XS , 0,isb);
    }
    
    
}
    
     
       
void tran(double s)
{
    /* stringstream ss;
    ss << s;
    string str ;
    ss >> str; */
    string str;
    str = to_string(s);
    string ZS, XS;
    for (int i = 0; i<str.size();i++)
    {
        if (str[i]=='.')
        {
            ZS = str.substr(0, i);
            XS = str.substr(i+1, str.size()-i);
            break;
        }
    }
    if(ZS.size() == 1 && ZS[0] == '0')//处理开头就是0的情况
    {
        ProcessXS(XS,XS.size ()>2?2:XS.size ());
    }else{
    ProcessW(ZS,XS,ZS.size (),ZS.size ()>4?false:true) ;}
    //cout<<ZS<<endl ;
 

     }

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

int main()
{
    double sss;
    cin>>sss;
    cout<<"人民币";
    tran(sss);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
华为手撕题leetcode是指华为面试中要求候选人现场手撕leetcode题目。这种面试方式常用于评估候选人的编程能力和解决问题的能力。 使用华为手撕题leetcode的优点是能够直接考察候选人的编程能力和思维逻辑。面试官可以根据候选人的解题过程和代码实现来评估其算法和编程能力,从而更直观地了解候选人的能力水平。 使用这种面试方式还可以考察候选人在时间有限的情况下解决问题的能力。手撕编码题要求候选人在短时间内完成编写算法和实现代码。这种情况下,候选人需要通过灵活运用算法知识、代码实现技巧和系统思考能力,快速找到解决问题的方法。 然而,华为手撕题leetcode也存在一定的局限性。一方面,手撕题leetcode可能只考察候选人的算法和编程能力,而忽略了其他的技术要求,如系统设计、代码架构等。另一方面,由于题目限定在leetcode的题库中,候选人可能通过事先刷题来准备,从而提前得到题目的答案,影响面试评估的公正性。 为了克服这些限制,华为还会在面试中结合其他的问题和项目经验,综合评估候选人的整体能力。此外,华为还会要求候选人进行coding test,即在指定时间内以线上编码的方式解决问题,更直观地了解候选人的编码能力。 总的来说,华为手撕题leetcode是一种评估候选人编程能力和解决问题能力的有效方式,但也需要综合考虑其他方面的能力和筛选方法,以评估候选人的真实水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoomCon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值