PAT甲级 Read Number in Chinese (25) python实现 解题思路及注意事项

时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

题目描述

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".

 

输入描述:

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


 

输出描述:

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.

 

输入例子:

-123456789

 

输出例子:

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

这题首先要把中文的数字读法学好!

注意以下几个实例判断

1.   100000001

2.   10301234

3.   100001234

4.    100000000

python代码如下:

num = ['ling', 'yi', 'er', 'san', 'si', 'wu', 'liu', 'qi', 'ba', 'jiu']

k = ['ling', 'Shi', 'Bai', 'Qian', 'Wan', 'Shi', 'Bai','Qian','Yi']

def rankid(number):
    rank = []
    a = tstr(number)
    rank.append(a)
    return rank[0]

# 取整取余并连接,返回连接好的字符串和余数
def turn(x, y):
    if y >= 1:
        a = x // pow(10, y)
        b = x % pow(10, y)
        c = num[a] +' '+ k[y]
        if y > 4 and b < pow(10, 4):
            if (len(str(x)) - len(str(b))) > 4 :
                if b!=0:
                    c += ' ' + k[0]
            else:
                c += ' '+k[4]
        if (len(str(x)) - len(str(b))) >= 2 and (len(str(x)) - len(str(b))) <= 4 \
                and b != 0 and len(str(b))!=4 and len(str(b))!=8:
            c += ' '+k[0]

    else:
        a = x
        b = 0
        c = num[a]
    return (c, b,)
# 调用上一个函数,以保证进行完所有的数并返回
def tstr(x):
    c = turn(x, (len(str(x)) - 1))
    a = c[0]
    b = c[1]
    while b != 0:
        a += ' '+turn(b, (len(str(b)) - 1))[0]
        b = turn(b, (len(str(b)) - 1))[1]

    return a

number=int(input())
if number<0:
    number=-number
    ranki = rankid(number)
    ranki='Fu '+ranki
    print(ranki.strip())
else:
    ranki = rankid(number)
    print(ranki.strip())

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值