A1082. Read Number in Chinese (25)

A1082

题目描述如下:

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

我的AC代码是:

#include <cstdio>
#include <cstring>
char trans[10][5] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
char other[4][5] = { "","Shi","Bai","Qian"};
char num[10];
int main() {
    int n;
    scanf("%d", &n);
    bool block = false;//表示需要一个空格
    if (n < 0) {
        printf("Fu");
        n = -n;
        block = true;
    }
    else if (n == 0) {
        printf("ling"); return 0;
    }
    sprintf(num, "%d", n);
    int m = strlen(num);
    int section = (m - 1) / 4 + 1, contain, info = 0;
    bool flag, fullzero;
    while (section) {
        flag = false;
        fullzero = true;
        contain = m % 4;
        if (contain == 0)contain = 4;
        for (int i = 0; i < contain; i++) {
            if (num[info + i] == '0') {
                flag = true;
            }
            else {
                if (flag)
                    printf(" ling");
                flag = false;
                fullzero = false;
                if (block)
                    printf(" %s", trans[num[info + i] - '0']);
                else
                    printf("%s", trans[num[info + i] - '0']);
                int k = contain - i - 1;
                if (k)printf(" %s", other[k]);
                block = true;
            }
        }
        m -= contain;
        if (!fullzero) {
            switch (section) {
            case 3:printf(" Yi"); block = true; break;
            case 2:printf(" Wan"); block = true; break;
            }
        }
        section--;
        info += contain;
    }
    return 0;
}

注意几个例子:

800000000 ba Yi

800000008 ba Yi ling ba

808080808 ba Yi ling ba Bai ling ba Wan ling ba Bai ling ba

880808080 ba Yi ba Qian ling ba Shi Wan ba Qian ling ba Shi

80008000 ba Qian Wan ba Qian

0 ling

8 ba


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值