原文链接:PAT-乙级-1002
题目大意:
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
解题思路:
题目本身难度不大,主要考察的就是数字与字符串之间的转换。首先输入字符串,然后将每个字符转换成数字相加。然后将和变为相应的拼音输出。
但是这题提交了三次才AC,前两次一直超时,一开始我以为是我使用了堆栈的原因,后来发现把堆栈换掉还是不对。再后来才发现,我输入字符串的时候是使用getchar()一个一个输入的,这样的话就增加了IO次数,使得时间增加,所以导致了超时,后来换掉了就可以了
代码:
#include<iostream>
#include<string>
#include<sstream>
#include<cstring>
using namespace std;
string number[10] = { "ling",//store pinyin of the number from 0 to 9
"yi",
"er",
"san",
"si",
"wu",
"liu",
"qi",
"ba",
"jiu",
};
int main()
{
string input;
while (cin >> input) {//using getchar() will make TLE
int sum = 0; bool first = true;
for (unsigned int i = 0; i < input.length();i++) {
int n = input[i] - '0';
sum += n;
}
stringstream ss; ss << sum; //transform int to str
string s = ss.str();
for (int i = 0; i < s.length(); i++) { //output
if (!first) cout << " ";
first = false;
cout << number[s[i] - '0'];
}
cout << endl;
}
return 0;
}