题目
代码
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
int main(){
string numStr;
cin>>numStr;
int sum = 0;
//cout<<numStr<<endl;
//cout<<numStr.size()<<endl;
for(int i=0;i<numStr.size();i++){
//cout<<numStr[i]<<endl;
//cout<<typeid(numStr[i]).name()<<endl;
//cout<<numStr[i] - '0'<<endl;
sum += numStr[i] - '0';
//cout<<sum<<endl;
}
string sumStr = to_string(sum);
//cout<<sumStr;
string stringArray[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
for(int i=0; i<sumStr.size();i++){
//cout<<sumStr[i] - '0'<<endl;
cout<<stringArray[sumStr[i] - '0'];
if(i != sumStr.size()-1){
cout<<" ";
}
}
return 0;
}
解题思路
本题主要是考察string和int间的互相转换,两个trick:
1.在将string下标取值的结果是char类型,如果想要将其转为int只需轻松利用ASCII码,sumStr[i] - '0’就可以。尝试了atoi()、stoi()函数都报错了。
2.本题数据范围取值很广泛,所以在最初输入数据时,使用int和long来装数据,都不能防止极端情况。在这里我们一开始就使用string来存储数据,这样就避免了数据溢出的极端情况。