PAT (Basic Level) Practice (中文)数据结构

1002 写出这个数

2019-01-02  本文已影响0人  飞白非白

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

源代码

#include <stdio.h>

int main()
{

    // 每一个数由索引与其拼音关联起来
    char map[10][4] = {"ling", "yi", "er",
                       "san", "si", "wu", "liu", "qi", "ba", "jiu"};

    // sum用于保存、各个位之和
    int sum = 0;

    // 用于保存输入的每个数字字符
    char input;

    // 边输入边计算和
    for (int i = 0; (input = getchar()) != '\n' && i < 101; i++)
    {
        // 注意是减去'0',而不是'\0'
        sum = input - '0' + sum;
    }

    // printf("%d", sum);
    // 最大有100个9,各个位数之和不超过900,故最多有三位

    int firstNum = sum / 100;

    int secondNum = (sum % 100) / 10;

    int thirdNum = (sum % 100) % 10;

    //第一位和第二位为0
    if (firstNum == 0 && secondNum == 0)
    {
        printf("%s", map[thirdNum]);
    }

    // 第一位为0,第二位不为0
    else if (firstNum == 0 && secondNum != 0)
    {
        printf("%s %s", map[secondNum], map[thirdNum]);
    }
    // 三位都不为0
    else
    {
        printf("%s %s %s", map[firstNum], map[secondNum], map[thirdNum]);
    }
    return 0;
}

不足之处

题目规定最后一个拼音后面不能有空格,但由于我使用了字符数组,所以自带了一个空字符,为了不添加更多的代码所以没写完善,后面有时间再加吧

上一篇 下一篇

猜你喜欢

热点阅读