读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
解析:
使用 split() 函数把输入的字符串拆分成列表,因列表内的每一项都是字符型,可以使用列表推导式(列表解析式)把str类型转换成int类型,使用sum()函数求和拆分,找到对应的汉语拼音进行相应的格式输出。
我这里使用的输出方式是为了加深理解三目运算,可以把列表里的转换成相应的汉语拼音使用‘ * ’号进行列表拆包,使用列表进行拆包先要颠倒列表内的顺序,不然就会得到‘wu san yi’(以本题的输入样例为例)。
注:由于本人的学习顺序问题本人会把现在主要学的放在前面
解题:
# 数字转换
def numChange():
# 数据输入并求和
number = sum([int(i) for i in list(input())])
# 数字转换,处理数据
strNumberList = list() # 储存拆开的数字
while number > 0:
strNumberList.append(number % 10)
number //= 10
# 打印结果
for i in range(len(strNumberList) - 1, -1, -1): # 从列表的右边依次转换输出
# 输出方式参考三目运算符
print("{} ".format(numDict[strNumberList[i]]) if i != 0 else "{}".format(numDict[strNumberList[i]]), end="")
if __name__ == '__main__':
# 前期准备
numDict = {0: "ling", 1: "yi", 2: "er", 3: "san", 4: "si", 5: "wu", 6: "liu", 7: "qi", 8: "ba", 9: "jiu"}
numChange() # 数字转换
#include <stdio.h>
int main(void)
{
char pingyin[10][5]={"ling","yi","er","san","si","wu","liu",
"qi","ba","jiu"};
char num[100];
long long int index[100];
long long int sum=0;
//将index数组的值设置为-1
for(int i=0;i<100;i++){
index[i]=-1;
}
scanf("%s",num);
int j=0;
//将输入的数字(字符)相加得sum
while(num[j]!='\0'){
sum+=num[j]-'0';
j++;
}
//将sum分解789 7,8,9 放入index[i]中
int k=0;
while(sum!=0){
index[k]=sum%10;
sum/=10;
k++;
}
//输出
for(int i=99;i>=0;i--){
if(index[i]!=-1){
//输出最后一个是无空格
if(i==0){
printf("%s",pingyin[index[i]]);
}else{
printf("%s ",pingyin[index[i]]);
}
}
}
return 0;
}