错误点:正整数可以很大,超过了int最大值,只能一个一个数字取
#include <iostream>
#include <stack>
using namespace std;
void print(int n) {
int x = 0;
stack<int> s;
string str[] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
while (n > 0) {
x += n % 10;
n /= 10;
}
while (x > 0) {
n = x % 10;
x /= 10;
s.push(n);
}
while (!s.empty()) {
x = s.top();
cout << str[x];
s.pop();
if (!s.empty())
cout << " ";
}
}
int main() {
int n = 0;
cin >> n;
print(n);
return 0;
}
可行的代码,这里要注意取一个一个字符,‘0’对应的值是48,要减去48
#include <iostream>
#include <stack>
using namespace std;
void print(int n) {
int x = 0;
stack<int> s;
string str[] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
while (n > 0) {
x = n % 10;
n /= 10;
s.push(x);
}
while (!s.empty()) {
x = s.top();
cout << str[x];
s.pop();
if (!s.empty())
cout << " ";
}
}
int main() {
char ch;
int sum = 0;
while ((ch = getchar()) != '\n')
sum += ch - '0';//'0'的ascii码是48,'1'的ascii码是49,若需得到真正的0,则要减去48
print(sum);
}