PAT :计算机程序设计能力考试:一个高校编程学习赛,内容基础,据说题目描述含糊不清,造成诸多理解错误。
第一观感是:输入输出样例极少,未给学生充分理解题目,提供更多辅助。
PAT 乙级:只涉及基础编程,最难到排序算法。适合基础语法学习阶段的同学。
问题描述
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于10100。
输出格式
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格
。
输入输出样例
输入样例 | 输出样例 |
---|---|
1234567890987654321123456789 | yi san wu |
样例解释:
题解 1
思路分析:使用字符数组接收输入,求和后,拆出 和 的每一位上的数字,而后,输出其对应的汉语拼音。其中,字符串数组 pins
,下标 0~9,对应数字 0~9,各下标处元素值,为对应汉语拼音。
#include<iostream>
using namespace std;
int main() {
char chs[101];
cin >> chs;
// 求字符总和
int sum = 0;
int i = 0; // 记录字符个数
while(chs[i] != '\0') {
sum += (chs[i++] - '0');
}
// 将字符总和 转为汉语拼音
int t_sum = sum;
int k = 0; // 记录 sum 的位数
// 将 t_sum 逆序存储在 chs 中
while(t_sum) {
chs[k++] = t_sum % 10 + '0';
t_sum /= 10;
}
// 遍历 chs[0...k),输出对应的中文拼音
string pins[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
// 逆序存储,逆序输出
for(int i = k - 1; i > 0; i--) {
cout << pins[chs[i]-'0'] << " ";
}
cout << pins[chs[0]-'0'] << endl;
return 0;
}