题目
思路
- 注意到N的范围很大,所以要用字符串输入,根据字符算出sum
- 然后按照顺序输出sum的每一位,由于正常顺序是从个位开始的,所以需要倒序一下
几个技巧
数字与英文字符串的对应可以用二维数组来对应
char table[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
倒序输出要先存一下每一位,然后再倒过来输出一遍,有几种可以选择的方法。
- 使用数组,记录sum位数长度,然后倒序
- 使用vector,长度是现成,然后倒序
dfs递归
void dfs(int n){ if(n/10==0){ printf("%s",num[n%10]); return; } dfs(n/10); printf("%s",num[n%10]); }
- 边界条件判断:如果sum==0,可以直接输出。
代码
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
char table[10][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
vector<int> res;
int main(){
char c[150];
int sum=0;
cin>>c;
int i=0;
while (c[i]!=0){
sum=sum+(c[i]-'0');
i++;
}
// cout<<sum<<endl;
if(sum==0){
cout<<"zero"<<endl;
return 0;
}
while(sum>0){
res.push_back(sum%10);
sum/=10;
}
for(int i=int(res.size())-1;i>=0;i--){
cout<<table[res[i]];
if (i!=0) {
cout<<" ";
}
}
return 0;
}