3.6 PAT A1082 Read Number in Chinese (25分)

1082 Read Number in Chinese (25分)

Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output Fu first if it is negative. For example, -123456789 is read as Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu. Note: zero (ling) must be handled correctly according to the Chinese tradition. For example, 100800 is yi Shi Wan ling ba Bai.

Input Specification:

Each input file contains one test case, which gives an integer with no more than 9 digits.

Output Specification:

For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.

Sample Input 1:

-123456789

 

Sample Output 1:

Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu

 

Sample Input 2:

100800

 

Sample Output 2:

yi Shi Wan ling ba Bai

 此题比较麻烦,特别需要注意0的处理。

参考代码;

#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
char num [10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"} ;
char wei[5][5]={"Shi","Bai","Qian","Wan","Yi"};
int main()
{
    char s[15];
    while(scanf("%s",&s)!=EOF)
    {
        int len=strlen(s);
        int left=0,right=len-1;
        if(s[0]=='-')
        {
            printf("Fu");
            left++;
        }
        while(left+4<=right)
            right-=4;
        while(left<len)
        {
            bool flag=false;
            bool isprint=false;
            while(left<=right)
            {
                if(left>0&&s[left]=='0')
                {
                    flag=true;
                }
                else
                {
                    if(flag)
                    {
                        printf(" ling");
                        flag=false;
                    }
                    if(left>0)
                        printf(" ");
                    printf("%s",num[s[left]-'0']);
                    isprint=true;
                    if(left!=right)
                        printf(" %s",wei[right-left-1]);
                }
                left++;
            }
            if(isprint==true&&right!=len-1)
                printf(" %s",wei[(len-1-right)/4+2]);
            right+=4;
        }
    }
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值