7-168 币值转换 (20 分)

简介: 7-168 币值转换 (20 分)

7-168 币值转换 (20 分)


输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。


输入格式:


输入在一行中给出一个不超过9位的非负整数。


输出格式:


在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。


输入样例1:


813227345



输出样例1:


iYbQdBcScWhQdBeSf


输入样例2:


6900


输出样例2:


gQjB



#include<iostream>
//①从count开始后缀为0,不发声(但要警惕类似130/0000的,不要忘记补上“万”)
//②0只发零不带权值
//③中间连续的0只发一个音
//④不要忘记最小的个位数0
using namespace std;
int main (void){
    int n;
    cin>>n;
    if(n==0){
        cout<<'a';
        return 0;
    }
    int s[9];
    for(int i=0;i<9;i++)s[i]=-1;//数组统一赋初值
    int flag=1;//标记末尾的0
    int count=8;
    //放入数组
    for(int i=8;n;i--){
        s[i]=n%10;
        if(s[i]!=0&&flag==1){count=i;flag=0;}//从后往前第一次出现不是0的位
        n=n/10;
    }
    int flag0=1;//检测是否有多个0
    for(int i=0;i<=count;i++){
        if(s[i]==-1)continue;
        else if(s[i]==0&&i==4&&(s[1]>0||s[2]>0||s[3]>0)){cout<<'W';continue;}
        //是0的情况,且是万位,而且不是类似100000001的情况,此时不发0只发W
        switch(s[i]){
            case 0:if(flag0)cout<<'a';break;
            case 1:cout<<'b';break;
            case 2:cout<<'c';break;
            case 3:cout<<'d';break;
            case 4:cout<<'e';break;
            case 5:cout<<'f';break;
            case 6:cout<<'g';break;
            case 7:cout<<'h';break;
            case 8:cout<<'i';break;
            case 9:cout<<'j';break;
            default:break;
        }
        if(s[i]!=0)//零处除了万其他时候权值不发音
            switch(i){
                case 0:cout<<'Y';break;
                case 1:cout<<'Q';break;
                case 2:cout<<'B';break;
                case 3:cout<<'S';break;
                case 4:cout<<'W';break;
                case 5:cout<<'Q';break;
                case 6:cout<<'B';break;
                case 7:cout<<'S';break;
                default:break;
            }else if(s[i]==0)flag0=0;//如果这次是0,那么下次遇到零就不发音
    }if(count>0&&count<4)cout<<'W';//最后给因为后缀是0而忽略万的数补上W
}
目录
相关文章
|
4月前
|
存储 Unix C++
c++时间形式转换
【10月更文挑战第29天】在 C++ 中,时间形式转换主要涉及将时间在不同表示形式之间转换,如字符串与 `tm` 结构或 `time_t` 类型之间的转换。常用的基本时间类型包括 `time_t` 和 `tm` 结构,转换函数有 `strftime` 和 `strptime`,可以满足大多数时间处理需求。此外,还可以通过自定义类来扩展时间转换功能。
|
8月前
1087 有多少不同的值 (20 分)
1087 有多少不同的值 (20 分)
|
8月前
|
存储 编解码
1068 万绿丛中一点红 (20 分)
1068 万绿丛中一点红 (20 分)
|
8月前
|
安全 C语言 C++
数与字符串相互转化
数与字符串相互转化
43 1
|
9月前
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
进制之间的转换
说明:进制之间的转换有多种,我只列出自己常使用的方法。 十进制:十进制是以 0-9 这九个数字组成的,也是我们日常生活中最常见的数字 二进制:二进制是 0 和 1 这两个数字组成的,一般常用于计算机中表示 八进制:八进制是 0-7 这八个数字组成的,为了区分,一般开头以 0 开头 十六进制:十六进制由 0-9 和A-F 组成,从 A-F 为 10-15,为了区别,开头以 0x 开头
L1-008 求整数段和 (10 分)
L1-008 求整数段和 (10 分)
103 0
7-10 找最小的字符串 (15 分)
7-10 找最小的字符串 (15 分)
338 0
7-14 求整数段和 (15 分)
7-14 求整数段和 (15 分)
135 0
7-211 求前缀表达式的值 (25 分)
7-211 求前缀表达式的值 (25 分)
244 0