题目链接:
自己的解法:
先求出各个数之和,依次将其个位数入栈,然后出栈并弹栈。
#include <bits/stdc++.h>
using namespace std;
string arr[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
string s;
stack<string> ans;
int cnt = 0;
cin >> s;
for (int i = 0; i < s.length(); i++) {
int x = s[i] - '0';
cnt += x;
}
if (cnt == 0) cout << "zero";//特判,当输入的数都为0的时候直接输出zero
else {
while (cnt > 0) {
ans.push(arr[cnt % 10]);//入栈
cnt /= 10;
}
while(!ans.empty()) {
cout << ans.top();//输出栈顶元素
if (ans.size() != 1) cout << " ";
ans.pop();//弹栈
}
}
return 0;
}
推荐解法:
#include <iostream>
using namespace std;
int main()
{
string a;
cin >> a;
int sum = 0;
for (int i = 0; i < a.length(); i++)
sum += (a[i] - '0');
string s = to_string(sum);//直接将整数sum转换为字符串,便于从前到后输出每一位
string arr[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
cout << arr[s[0] - '0'];
for (int i = 1; i < s.length(); i++)
cout << " " << arr[s[i] - '0'];
return 0;
}