【PAT (Basic Level) Practice (中文)(解:Python3.x)】1002 写出这个数(20分)

读入一个正整数 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;
}

如有更好的建议请评论!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值