读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
#include
#include
#include
#include
using namespace std;
int main()
{
int sum=0;
string n,output;
vector<int> sum_i;
vector<string> count{ "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };//将数字对应的拼音初始化成vector,使用数字下标取到对应拼音
cin >> n; //因为是一个超大整数,所以使用string
for (auto &i : n) //将string中的每个元素转换成int,然后求和
{
int n_dig;
stringstream ss;
ss << i;
ss >> n_dig;
sum = sum + n_dig;
}
while (sum != 0) //将sum拆解成各位上的数组成的vector
{
int i;
i = sum % 10;
sum_i.push_back(i);
sum = sum / 10;
}
if (sum_i.empty())
{
output = count[0];
}
else
{
for (auto it = sum_i.begin(); it != sum_i.end(); ++it)
{
if (it == sum_i.begin())
output = count[*it];
else
output = count[*it] + " " + output;
}
}
cout << output << endl;
system("pause");
return 0;
}
改进代码更加清爽
for(auto &i:n)
{
int n_dig;
n_dig = i - '0'; //利用ASCII码将char转化为int
sum += n_dig;
}
do
{
int i;
i = sum % 10;
sum = sum / 10;
if (output.empty())
output = count[i];
else
output = count[i] + " " + output;
} while (sum != 0);