1082. Read Number in Chinese (25)

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#include <cstring>

using namespace std;

char mp[20][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char mp2[20][10]={"xxx","Shi","Bai","Qian"};
char mp3[20][10]={"xxx","Wan","Yi"};
int main()
{
  //  freopen("in.txt","r",stdin);

    int len;
    char str[20];

    gets(str);
    len=strlen(str);

    if(len==1&&str[0]=='0')//特判0
    {
        printf("ling");
        return 0;
    }
    int left=0,right=len-1;
    if(str[0]=='-')
    {
        printf("Fu");
        left=1;
    }

    while(right-left>=4)
        right-=4;

    while(left<len)//每一节(4个为一节)
    {
        bool flag0 = 0;//记录有无积累的0
        bool flagp = 0;//记录有无打印东西

        while(left<=right)//每一节里的每一位(4个为一节)
        {
            if(str[left]=='0')
            {
                flag0=1;
            }
            else
            {
                if(flag0==1)//释放积累的0
                {
                    printf(" ling");
                    flag0=0;
                }
                if(left!=0)//格式
                    printf(" ");
                printf("%s",mp[str[left]-'0']);
                flagp=1;//有东西打印了
                if(left!=right)
                {
                    printf(" %s",mp2[right-left]);
                }

            }

            left++;
        }

        if(flagp==1 && right!=len-1)//打印万和亿。前提是有上面一节里有打印过东西,即若上一节全是0,则不用打印万和亿
        {
            printf(" %s", mp3[(len-1-right)/4] );
        }

        right+=4;//下一节
    }


    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值