7-23 币值转换

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

输入格式:

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

输出格式:

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

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

解题思路:

       题目意思是将一个不超过9位的数字转化成财务要求的大写中文,为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。

       我第一步先计算出所给数的位数w;第二步分别计算末尾0的个数z和万位(包括万)前面连续0的个数k ;第三步将各位数字存在数组num中;最后按照题目要求进行输出,也就是“零”的用法必须符合中文习惯,末尾和万位(包括万)前面连续的0都跳过输出,且万位跳过时输出单位W,除此之外,数字中间出现连续的0只输出一次就好,还需注意的是,某位不连续的0或者是个位时只需要输出该值对应的小写字母就可以,不需要输出单位。

代码:

#include<iostream>
using namespace std;
int main(){
    int n,num[9],i,j,k=0,t,w=1,z=0,m=0;
    char a='a',b[9]={' ','S','B','Q','W','S','B','Q','Y'};
    cin>>n;
    t=n;
    while(t){            //  计算n的位数w 
        if(t/10!=0) w++;
        t/=10;
    }
    t=n;  
    while(t){             //计算末尾0的个数z 
        if(t%10==0) {
            z++;
            t/=10;
        }
        else break;
    }
    t=n/10000;
    while(t){           //计算万位(包括万)前面连续0的个数k 
        if(t%10==0) {
            k++;
            t/=10;
        }
        else break; 
    }
    for(i=w,j=0;i>0;i--,j++){  //存各位数字到数组num中 
        num[j]=n%10;
        n/=10;
    }
    for(j=w-1;j>=z;j--){    //j>=z是去除掉末尾的0 
       if(j==3+k&&k!=0) {    //如果万位前面(包括万)有出现连续的k个0, 则跳过k位并输出单位W 
           j=j-k;
           k=0;
           cout<<b[4];
       }
       if(m==0)        //没有出现连续的数字0就输出 
        cout<<char(a+num[j]);
        if(num[j]==0&&num[j-1]==0) m=1; //判断数字中间是否有连续的0 
         else m=0;
        if(num[j]!=0&&j!=0)  //若该位数字为0或者该位数字是个位则不用输出单位 
          cout<<b[j];
    }
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值