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

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

华丽的分割线

代码实现:

  1. 解法一:
#include <stdio.h>

int main() {
    char *pinyn[] = {
        "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
    };

    // 获取输入的字符串
    char str[105];      // 10 ** 100 最多就 100 位数,多留几位
    if (scanf("%s", str)) {
        // 计算字符串中数字的和
        int sum = 0;
        int i = 0;
        while (str[i] != '\0') {
            sum += str[i] - '0';
            i += 1;
        }

        // 将 sum 拆分然后放入数组中
        int arr[5];         // 一百个 9 也就 900,三位数
        int j = 0;
        do {
            int n = sum % 10;
            arr[j] = n;
            sum = sum / 10;
            j++;
        }
        while(sum != 0);

        // 输出拼音
        for (i = j - 1; i >= 0; i--) {
            if (i == 0) {
                printf("%s", pinyn[arr[i]]);
            } else {
                printf("%s ", pinyn[arr[i]]);
            }
        }
        printf("\n");
    }

    return 0;
}
  1. 解法二:
#include <stdio.h>

int main() {
    char *pinyn[] = {
        "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"
    };

    // 获取输入的字符串
    char str[105];
    scanf("%s", str);

    int sum = 0;
    int i = 0;
    while (str[i] != '\0') {
        // switch 或 '0123456789'取下标
        //将字符转换为数字
        sum += str[i] - '0';
        i += 1;
    }

    // 求 sum 的长度
    int len = 1;
    int temp = sum / 10;
    while(temp != 0) {
        temp = temp / 10;
        len += 1;
    }

    // 将 sum 拆分然后放入数组中
    int arr[len];
    for (int i = len - 1; i >= 0; i--) {
        arr[i] = sum % 10;
        sum = sum / 10;
    }

    // 输出拼音
    for(int i = 0; i < len; i++) {
        if (i == len - 1) {
            printf("%s", pinyn[arr[i]]);
        } else {
            printf("%s ", pinyn[arr[i]]);
        }
    }
    printf("\n");

    return 0;
}
posted @ 2022-05-26 08:38  夏夜星空晚风  阅读(38)  评论(0编辑  收藏  举报