PAT 1002 写出这个数 (20分) C语言实现

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

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

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

输入样例:
1234567890987654321123456789

输出样例:
yi san wu

首先写一下大体的解题思路(因人而异):
1.由于是n小于10的100次方的值,这里肯定不能用int等类型接收了,因为大小超限了。
2.用char接收后,要把char转为int值,然后每一位相加,得到所有位数的值的和。
3.最后把这个得到的值再转成拼音即可。

代码如下:

#include <stdio.h>
#include <string.h>

int main() {
    //定义一个数组 用来接收输入的值;
    char num[100];
    //定义一个二维数组,用来存储拼音
    //10行5列,其实4列应该也可以。
    //C语言的二维数组,每行不够时后面的空位会补位。
    //C语言的数组,如果不初始化,数组里面的值都是垃圾值,初始化一半的话,没有初始化的值,都为0
    char py[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    //定义一个数组用来存储求得的和的每一位。由于最大是100位,每位都是9,4位的长度足矣。
    int a[4];
    //输入数据
    scanf("%s", num);
    //定义一个total 去计算num每一位加起来的和
    int total = 0;
    //把total的每一位存起来,存的顺序是个十百千万
    int count = 0;
    //for循环去获取num的每一位
    for (int i = 0; i < strlen(num); ++i) {
        //把获取到的每一位num由char转为int值
        int a = num[i] - '0';
        //把每一位的int值相加
        total += a;
    }
    //循环计算
    while (total != 0) {
        // 获取total每一位的值,没循环一次 a的位置就多写一次
        //total % 10 就是依次计算各位十位百位等。
        a[count++] = total % 10;
        //取余以后要除以十,这样才可以依次取到每位的值。
        total /= 10;
    }
    //由于是顺序从个十百存的,取的时候要逆序。 例如 total是50,存的时候就是 a[0]=0,a[1]=5;
    //那读的时候如果正序读出来,就成了 ling wu. 正确的应该是 wu ling。
    //由于count 最后一次的时候会+1,所以这里取最后一位的时候要-1,不然会下标越界。
    for (int i = count - 1; i >= 0; i--) {
        //打印出答案即可
        printf("%s", py[a[i]]);
        //如果不是最后一位,则在后面加空格
        if (i != 0)
            printf(" ");
        //如果是最后一位,即认为是输出完成,则换行。
        else
            printf("\n");
    }
    return 0;
}

有问题留言即可,转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值