PAT (Basic Level) Practice (中文)
1002 写出这个数 (20 分)
题目简介
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10 100 。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789 结尾无空行
输出样例:
yi san wu 结尾无空行
. 读完题就知道,只需要输出 “输入数字的每一位的和”的每一位的拼音 . 例如:n = 123 我们知道和是:sum = 6 输出:liu 注意:输出的最后一位无空格
思路
- 输入
因为输入的数据非常大,无论用long long或是int类的都会超出范围,所以用char*或者string来 接收 n - 提取每一位,用 a[i]-48 就可以把char转int了,并且用一个int sum来存结果
- 用一个string数组来存放拼音,(也可以用switch case分支来实现 )
- 将sum转成string类后,遍历每一位,而每一位的数字恰好就是拼音数组对应的下标
代码实现
char数组(19分)
#include <iostream>
#include <string>
using namespace std;
string res[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char a[110];
int b[110];
int main(){
int i=0,sum=0,j=0,cnt=0;
do{
char ch=getchar();
if(ch=='\n') break;
a[i++]=ch;
}while(1);
for(int k=0;k<i;k++){
sum+=a[k]-48;
}
do{
b[j++]=sum%10;
cnt++;
}while(sum/=10);
for(int k=cnt-1;k>=0;k--){
if(b[k]!=0){
if(b[k-1]!=0)
cout<<res[b[k]]<<" ";
else
cout<<res[b[k]];
}
}
}
string(20分满分)
#include <iostream>
#include <string>
using namespace std;
string res[11]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string a,b;
int sum=0;
int main(){
cin>>a;
for(int i=0;i<a.length();i++){
sum+=a[i]-48;
}
b = to_string(sum);
for(int i=0;i<b.length();i++){
cout<<res[b[i]-48];
if(i+1!=b.length()) cout<<" ";
}
}
|