0
点赞
收藏
分享

微信扫一扫

PAT 乙级 1002 写出这个数 (20 分)

后来的六六 2022-02-09 阅读 44

PAT 乙级 1002 写出这个数 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

解题思路:

问题的主要难在如何将得到的数字和转化为拼音,因此我们可以建立 map 映射将数字映射为对应拼音。可以使用语言自带的 map 类或者自己建立对应的映射。注意最后的答案需要逆序输出。

代码:

#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
    string str;
    cin >> str;
    
    // 求和
    int sum = 0, len = str.length();
    for (int i = 0; i < len; i++) {
        sum += str[i] - '0';
    }
    if (sum == 0) {	// 特判 sum == 0 的情况
        cout << "ling";
        return 0;
    }

    // 建立 map 映射
    map<int, string> mp = { {0, "ling"}, {1, "yi"}, {2, "er"}, {3, "san"}, {4, "si"},
                           {5, "wu"}, {6, "liu"}, {7, "qi"}, {8, "ba"}, {9, "jiu"} };
    vector<string> vec;		// string 类型的数组
    while (sum) {
        int temp = sum % 10;
        vec.push_back(mp[temp]);	// 插入到数组尾部
        sum /= 10;
    }

    // 逆序输出
    int i = vec.size();
    while (i-- > 1)
        cout << vec[i] << " ";
    cout << vec[i];		// 题目卡格式输出
    
    return 0;
}
举报

相关推荐

0 条评论