读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
输出格式:
在一行内输出 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]])