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
}
目录
相关文章
|
5月前
|
机器学习/深度学习 编译器 C语言
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
【C语言】数据输出的域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题
73 0
|
1月前
|
C++
C++(十六)类之间转化
在C++中,类之间的转换可以通过转换构造函数和操作符函数实现。转换构造函数是一种单参数构造函数,用于将其他类型转换为本类类型。为了防止不必要的隐式转换,可以使用`explicit`关键字来禁止这种自动转换。此外,还可以通过定义`operator`函数来进行类型转换,该函数无参数且无返回值。下面展示了如何使用这两种方式实现自定义类型的相互转换,并通过示例代码说明了`explicit`关键字的作用。
|
2月前
|
缓存 分布式计算 数据处理
|
4月前
1087 有多少不同的值 (20 分)
1087 有多少不同的值 (20 分)
|
4月前
|
安全 C语言 C++
数与字符串相互转化
数与字符串相互转化
22 1
|
5月前
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
7-4 计算职工工资(15分)
给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
87 0
7-211 求前缀表达式的值 (25 分)
7-211 求前缀表达式的值 (25 分)
215 0
7-10 找最小的字符串 (15 分)
7-10 找最小的字符串 (15 分)
304 0