蓝桥杯_基础训练_数的读法

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

思路:

把输入的数从右往左每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;
}

  

时间: 2024-10-19 15:36:40

蓝桥杯_基础训练_数的读法的相关文章

2014蓝桥杯——六角填数

标题:六角填数 如图所示六角形中,填入1~12的数字. 使得每条直线上的数字之和都相同. 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少? 请通过浏览器提交答案,不要填写多余的内容. 1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 #define eps 10e-10 8

蓝桥杯_基础训练_矩阵面积交

基础练习 矩形面积交 时间限制:1.0s   内存限制:512.0MB 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示. 输出格式 输出仅包含一个实数,为交的面积,保留到小数后两位. 样例输入 1 1 3 32 2 4 4 样例输出 1.00 题解: 由于不知道输

蓝桥杯_基础训练_完美的代价(贪心)

基础练习 完美的代价 时间限制:1.0s   内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!) 输入格式 第一行是一个整数N,表示接下来的字符串的长度(N <= 80

蓝桥杯_基础训练_龟兔赛跑预测

#include <iostream> using namespace std; int main() { int time=0,v1,v2,t,s,l; while(cin>>v1>>v2>>t>>s>>l) { bool gui=false,tu=false; //gui为真则龟到达终点,tu为真表示兔到达终点 int guil=0,tul=0; //guil表示龟当前的路程,tul表示兔当前时间的路程 time=0; //初始化

第四届蓝桥杯javaC组_第39级台阶

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着

第四届蓝桥杯javaC组_买不到的数目

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两

第四届蓝桥杯javaC组_组素数

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 素数就是不能再进行等分的数.比如:2 3 5 7 11 等. 9 = 3 * 3 说明它可以3等分,因而不是素数. 我

第四届蓝桥杯javaC组_马虎的算式

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却

第四届蓝桥杯javaC组_有理数类

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 有理数就是可以表示为两个整数的比值的数字.一般情况下,我们用近似的小数表示.但有些时候,不允许出现误差,必须用两个整数