PAT乙级题:1002写出这个数(20分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​。

输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

代码:

n = int(input())
len_n = len(str(n).strip())
list1 =[] #空列表用来存储每一位,从最高位开始,如果有多一位就依次排在后面就行了
while len_n != 1:
    m = int(n/(10**(len_n - 1))) #m用来存放每一位的数字,最后将m加入到列表里
    list1.append(m)
    n = n % (10**(len_n - 1)) #用来下一次循环的时候进行
    len_n = len_n -1
list1.append(n)  #最后list里存放的就是每一位的数字

num = sum(list1)
len_num = len(str(num).strip())
new_list = []
if len_num == 1:
    new_list.append(num)
else:
    while len_num != 1:
        p = int(num/(10**(len_num -1))) #m用来存放每一位的数字,最后将m加入到列表里
        new_list.append(p)
        num = num % (10**(len_num -1)) #用来下一次循环的时候进行
        len_num = len_num -1
    new_list.append(num) 

last_list = [] #空列表用来放最后的结果
pinyin_list = ["ling","yi","er","san","si","wu","liu","qi","ba","jiu"]
    #上面的new_list里存放的是n的各位数字之和的每一位
for i in range(len(new_list)):
    last_list.append(pinyin_list[new_list[i]])
for i in range(len(last_list)-1):
    print(last_list[i],end = ' ')
print(last_list[-1])

这是我一开始做的但是觉得有点麻烦,而且并没有得满分。
在这里插入图片描述
然后我想到存放每一位的数字其实不需要这么麻烦,可以把原来的数字转化为字符,这样每一位字符再取整自然是每一位的数字。
相应的,前面n位数字之和也不需要通过取余来计算,也可以用同理计算,于是计算如下:

n = input() #不需要转化为整型
n_list = [] #用来存放自然数n的每一位数字
for i in n:
    n_list.append(i)
sum_n = sum(list(map(int,n_list))) #用来存放自然数n的个位数字之和
#然后需要将sum_n也转化为字符
sum_str = str(sum_n)
sum_list = list(map(int,sum_str))
pinyin_list = ["ling","yi","er","san","si","wu","liu","qi","ba","jiu"]
for i in range(len(sum_list)-1):
    print(pinyin_list[sum_list[i]],end = " ")
print(pinyin_list[sum_list[-1]])

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值