输出以个小于1万亿的正整数的拼音读法

题目:输入一个小于1万亿的正整数,输出这个正整数的读法的拼音表示。

如,输入:1234,输出:yiqianerbaisanshisi

输入:1234567,输出:yibaiershisanwansiqianwubailiushiqi

注意:2不读做liang,而读作er。


下面有两种coding版本,第一种较粗暴,是一个字符一个字符的处理,代码量很大。第二种用map存储一下对应为的后缀,代码量小一点。并且注意:第一种coding方法没有处理123004这种中间有两个零的情况(可以加点代码就能把这种情况考虑到,懒得加了),而第二种情况处理了这种情况。


第一种方法:每四位一组,读最高四位后(假如高四位不为空),后跟yi,接着读中间四位(假如中间四位不为空),后跟wan,接着读最低四位。第一种方法虽然coding量比较大,但思路也是非常简单。

代码如下:

#include<stdio.h>
#include<iostream>
using namespace std;

int main()
{
    char source[20]="";
    char yi[5]="";
    char wan[5]="";
    char ge[5]="";
    char destination[10000];
     
    int i=0;
    scanf("%s",source);
    int len=strlen(source);
    if(len<5)
    {   
        for(i=0;i<len;i++)
        ge[i]=source[i];
        ge[i]='\0';
    }   
    else if(len<9)
    {   
        int j=0;
        for(i=len-4;i<len;i++,j++)
        ge[j]=source[i];
        ge[j]='\0';
        j=0;
        for(i=0;i<len-4;i++,j++)
        {
            wan[j]=source[i];
        }
        wan[j]='\0';
    }   
    else
    {       
        int j=0;
        for(i=len-4;i<len;i++,j++)
        ge[j]=source[i];
        ge[j]='\0'; 
        j=0;        
        for(i=len-8;i<len-4;i++,j++)
        {
            wan[j]=source[i];
        }
        wan[j]='\0';
        j=0;
        for(i=0;i<len-8;i++,j++)
        {
            yi[j]=source[i];
        }
        yi[j]='\0';
    }
    i=0;
    if(strlen(yi)!=0)
    {
        int k=0;
        for(int yii=0;yii<strlen(yi);yii++)
        {
            switch(yi[yii])
            {
                case '1':
                    destination[i++]='y';
                    destination[i++]='i';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                            case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                            case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '2':
                    destination[i++]='e';
                    destination[i++]='r';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '3':
                    destination[i++]='s';
                    destination[i++]='a';
                    destination[i++]='n';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '4':
                    destination[i++]='s';
                    destination[i++]='i';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '5':
                    destination[i++]='w';
                    destination[i++]='u';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '6':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '7':
                    destination[i++]='q';
                    destination[i++]='i';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '8':
                    destination[i++]='b';
                    destination[i++]='a';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '9':
                    destination[i++]='q';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(yi)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '0':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='n';
                    destination[i++]='g';
                    k++;
                    break;
            }
        }
        destination[i++]='y';
        destination[i++]='i';
    }
    
    
    if(strlen(wan)!=0)
    {
        int k=0;
        for(int wani=0;wani<strlen(wan);wani++)
        {
            switch(wan[wani])
            {
                case '1':
                    destination[i++]='y';
                    destination[i++]='i';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '2':
                    destination[i++]='e';
                    destination[i++]='r';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '3':
                    destination[i++]='s';
                    destination[i++]='a';
                    destination[i++]='n';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }       
                    k++;    
                    break;  
                case '4':   
                    destination[i++]='s';
                    destination[i++]='i';
                    switch(strlen(wan)-k)
                    {       
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }       
                    k++;    
                    break;  
                case '5':   
                    destination[i++]='w';
                    destination[i++]='u';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '6':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '7':
                    destination[i++]='q';
                    destination[i++]='i';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '8':
                    destination[i++]='b';
                    destination[i++]='a';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                    case '9':
                    destination[i++]='q';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(wan)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '0':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='n';
                    destination[i++]='g';
                    k++;
                    break;
            }
        }
        destination[i++]='w';
        destination[i++]='a';
        destination[i++]='n';
    }
    
    
    if(strlen(ge)!=0)
    {
        int k=0;
        for(int gei=0;gei<strlen(ge);gei++)
        {
            switch(ge[gei])
            {
                case '1':
                    destination[i++]='y';
                    destination[i++]='i';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '2':
                    destination[i++]='e';
                    destination[i++]='r';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '3':
                    destination[i++]='s';
                    destination[i++]='a';
                    destination[i++]='n';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '4':
                    destination[i++]='s';
                    destination[i++]='i';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '5':
                    destination[i++]='w';
                    destination[i++]='u';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '6':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '7':
                    destination[i++]='q';
                    destination[i++]='i';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '8':
                    destination[i++]='b';
                    destination[i++]='a';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '9':
                    destination[i++]='q';
                    destination[i++]='i';
                    destination[i++]='u';
                    switch(strlen(ge)-k)
                    {
                        case 4:
                            destination[i++]='q';
                            destination[i++]='i';
                            destination[i++]='a';
                            destination[i++]='n';
                            break;
                        case 3:
                            destination[i++]='b';
                            destination[i++]='a';
                            destination[i++]='i';
                            break;
                        case 2:
                            destination[i++]='s';
                            destination[i++]='h';
                            destination[i++]='i';
                            break;
                    }
                    k++;
                    break;
                case '0':
                    destination[i++]='l';
                    destination[i++]='i';
                    destination[i++]='n';
                    destination[i++]='g';
                    k++;
                    break;
            }
        }
    }
    destination[i]='\0';
    cout<<destination<<endl;
    return 0;
}


 

第二种方法:用map<int,string>存储对应位的后缀是什么,其中int是这个位的索引(第几位),string表示对应的后缀,如第2为对应“shi”、第5位对应"wan"等。其实可以再用map<char,string>表示对应字符的拼音表示,如‘0’对应“ling”、'1'对应"yi"等,这里用了switch的方法,不是最优。代码如下:

#include<iostream>
#include<map>
using namespace std;

int main()
{
    char source[20];
    char result[1000]="";
    cin>>source;
    map<int,string> suffix;
    map<int,int> suffix_len;
    suffix[2]="shi";
    suffix_len[2]=3;
    suffix[3]="bai";
    suffix_len[3]=3;
    suffix[4]="qian";
    suffix_len[4]=4;
    suffix[5]="wan";
    suffix_len[5]=3;
    suffix[6]="shi";
    suffix_len[6]=3;
    suffix[7]="bai";
    suffix_len[7]=3;
    suffix[8]="qian";
    suffix_len[8]=4;
    suffix[9]="yi";
    suffix_len[9]=2;
    suffix[10]="shi";
    suffix_len[10]=3;
    suffix[11]="bai";
    suffix_len[11]=3;
    suffix[12]="qian";
    suffix_len[12]=4;

    int len=strlen(source);
    int result_index=0;
    for(int i=len-1;i>=0;i--)
    {
        switch(source[len-1-i])
        {
            case '1':
                strcat(result+result_index,"yi");
                result_index+=2;
                break;
            case '2':
                strcat(result+result_index,"er");
                result_index+=2;
                break;
            case '3':
                strcat(result+result_index,"san");
                result_index+=3;
                break;
            case '4':
                strcat(result+result_index,"si");
                result_index+=2;
                break;
            case '5':
                strcat(result+result_index,"wu");
                result_index+=2;
                break;
            case '6':
                strcat(result+result_index,"liu");
                result_index+=3;
                break;
            case '7':
                strcat(result+result_index,"qi");
                result_index+=2;
                break;
            case '8':
                strcat(result+result_index,"ba");
                result_index+=2;
                break;
            case '9':
                strcat(result+result_index,"jiu");
                result_index+=3;
                break;
        }
        if(source[len-1-i]=='0')
        {
            int j;
            for(j=len-1-i+1;j<(len-1-(((i+1)/4)*4-1));j++)
            {
                if(source[j]!='0')
                    break;
            }
            if(j==(len-1-(((i+1)/4)*4-1)))
            {
                i=((i+1)/4)*4-1;
                strcat(result+result_index,suffix[i+2].c_str());
                result_index+=suffix_len[i+2];
                continue;
            }
            else
            {
                strcat(result+result_index,"ling");
                result_index+=4;
                i=len-1-j+1;
                continue;
            }
        }
        strcat(result+result_index,suffix[i+1].c_str());
        result_index+=suffix_len[i+1];
    }
    result[result_index]='\0';
    cout<<result<<endl;
    return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值