zoukankan      html  css  js  c++  java
  • 蓝桥杯_基础训练_数的读法

    有点恶心的一道题,做了整整半天才完全对。

    思路:

    把输入的数从右往左每4位进行分割。然后判断单位级数,输出即可。

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        string a;
        string num[]={"ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu "};    //存数的拼音
        string wei[]={"","shi ","bai ","qian "};              //单位读法
        string kk[]={"","wan ","yi "};                //级数读法 万 亿
        string b[3];      //存分割之后的数,从右到左每四位分为一个字符串
        while(cin>>a)
        {
            int alen=a.length();
            for(int i=0;i<3;i++)
                b[i].clear();
            int blen=0;
            int k=1;
            for(int i=a.length()-1;i>=0;i--)    //每四位进行分割字符
            {
                if(k<5)
                {
                        b[blen]+=a[i];
                        k++;
                }
                else
                {
                    blen++;
                    k=1;
                    i++;
                }
            }
            for(int i=blen;i>=0;i--)
            {
                reverse(b[i].begin(),b[i].end());   //翻转分割之后的每组字符串
                //cout<<b[i]<<endl;
            }
            for(int j=blen;j>=0;j--)    //下标小的级数高,比如123456的分割结果:b[0]="12",b[1]="3456";
            {
                for(int i=0;i<b[j].length();i++)    //循环输出每组字符串
                {
                    if(i==b[j].length()-1&&b[j][i]-'0'==0)   //如果到最后一位并且该位为0,
                    {
                        continue;
                    }
                    else
                    {
                        if(b[j][i]-'0'==0&&b[j][i+1]-'0'==0)   //如果中间有多个0
                            continue;
                        if(b[j][i]-'0'==0)                   //如果该位为0,只输出数
                        {
                            cout<<num[b[j][i]-'0'];
                            continue;
                        }
                        else
                        {
                            if(b[j].length()==2&&i==0&&b[j][i]=='1')   //如果当前字符串的长度为2,并且最高位为1。处理十几的读法,比如12读 shi er,不读yi shi er。
                            {
                                cout<<wei[b[j].length()-i-1];
                            }
                            else
                                cout<<num[b[j][i]-'0']<<wei[b[j].length()-i-1];
                        }
                    }
                }
                cout<<kk[j];
            }
            cout<<endl;
        }
        return 0;
    }
    

      

    人生如修仙,岂是一日间。何时登临顶,上善若水前。
  • 相关阅读:
    排序去重
    $(...)[0].attr is not a function问题
    daterangepicker的汉化和简单使用
    wx.openSetting的调整
    css3中-moz、-ms、-webkit与盒子模型
    动态翻滚的导航条
    CSS3 transition 浏览器兼容性
    jq实现两个input输入同时不为空时,改变确认框背景颜色
    js 监听input 实现数据绑定
    关于html 修改滚动条的问题
  • 原文地址:https://www.cnblogs.com/f-society/p/6717752.html
Copyright © 2011-2022 走看看