1005
自己写的时候用栈倒,但有三个测试点错误。看了别人的代码后重新写,字符串的方便之处在于可以逐位处理。
总结:
1. string类型的size和length是一样的,遍历处理各字符时常用。
2.字符型数字要减去'0'才是对应数值。
3.用sprintf把数值类型转为字符串类型,从而能按下标遍历处理各位。
4.常量数组的使用,比switch简洁得多。
#include <iostream>
#include <string>
using namespace std;
const int maxn = 10000;
string digits[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
int main(){
// 读入字符串
string str;
cin>>str;
// 计算各位和
int sum = 0;
for (int i=0; i<str.size(); i++) {
sum += str[i] - '0';
}
//把各位和从整型转为字符串
char c[maxn];//不懂为啥要设这么大,我估算的最大位数只有3位?希望有人指点一下。
string cSum;
sprintf(c, "%d", sum);
cSum = c;
//输出各位对应英文字母
for (int i=0; i<cSum.length(); i++) {
cout<<digits[cSum[i] - '0'];
if (i != cSum.length()-1) {
cout<<" ";
}
}
return 0;
}