7-43 币值转换 (20 分)

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

输入格式:

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

输出格式:

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

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

昨天晚上在睡觉的时候有了灵感,哈哈 那个中间零的想法就出来了

我这道题写的比较麻烦 中间有零情况比较难

给你们说一下思路

我就考虑特殊情况

首先是后面是零的情况 我用的while循环找出后面有多少个零(万里面找一个,个位那里找一个),万的话是我睡觉的时候有的思路(昨天晚上写不出来,睡觉忽然就脑子转起来了,哈哈),就找出后就不用管它了(这是我考虑的情况一这个比较难)

第二个考虑的情况就是个位或者万位不是零,其他位含有多个连续零(就一个if语句就可以搞定)

一个细节 第二个for循环哪里,开始的时候不是从千位开始的(这个的话课读出一个零)这个是我碰巧写出来的,

其实也可以利用if语句写,然后从千位开始。既然对了就不该了。

补上昨天没写出来的代码,上代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
    char s[10];
    cin>>s;
    int n=strlen(s);//计算多少位
    char shu[11]={'a','b','c','d','e','f','g','h','i','j'};
    int j=1;
    //6001
    if(s[n-1]=='0'&&n==1)
    {
        cout<<shu[0];
        return 0;
    }
    while(s[n-j]=='0')//最后面多少个零
    {
        j++;
    }
    int k=5;
    while(s[n-k]=='0')//万位多少连续的零
    {
        k++;
    }
    int m[n];//100100001  这是我实验的数
    for(int i=0;i<n-k+1;i++)
    {
        m[i]=s[i]-'0';
        if(m[i-1]==0&&m[i]==0)//第二种情况考虑
        {
            
        }       
        else
        {
            cout<<shu[m[i]];
            if((n-i)==9)
            {
                cout<<"Y";
            }
            else if(((n-i)==5)&&m[i]!=0)
            {
                cout<<"W";
            }
            else if(((n-i)==4||(n-i)==8)&&m[i]!=0)
            {
                cout<<"Q";
            }
            else if(((n-i)==3||(n-i)==7)&&m[i]!=0)
            {
                cout<<"B";
            }
            else if(((n-i)==2||(n-i)==6)&&m[i]!=0)
            {
                cout<<"S";
            }
        }       
    }//100100100
    if(s[n-5]=='0')  cout<<"W";//特殊情况考虑,上面代码没法输出W
    for(int i=n-k+1;i<n-j+1;i++)//下面循环内容跟上面一样  主要是这个for循环里面
    {
        m[i]=s[i]-'0';
        if(m[i-1]==0&&m[i]==0)
        {
            
        }
        else
        {
            cout<<shu[m[i]];
            if((n-i)==9)
            {
                cout<<"Y";
            }
            else if(((n-i)==5)&&m[i]!=0)
            {
                cout<<"W";
            }
            else if(((n-i)==4||(n-i)==8)&&m[i]!=0)
            {
                cout<<"Q";
            }
            else if(((n-i)==3||(n-i)==7)&&m[i]!=0)
            {
                cout<<"B";
            }
            else if(((n-i)==2||(n-i)==6)&&m[i]!=0)
            {
                cout<<"S";
            }
        }       
    }
}
上一篇:剑指 Offer 43. 1~n 整数中 1 出现的次数


下一篇:[ CQOI2016 ] 伪光滑数