题目描述如下: 大致题意: 给出一个非负整数N (<=10^100),计算该整数每位数字的和,并且将所得的结果的每一位数字转换为英文输出。 基本思路: 因为非负整数的取值范围可以达到10^100, 明显还要超过long long类型的2^64,此时已经不能用整形来接受输入,可以用字符串类型来接收输入。 用字符串接收输入后,使用for循环遍历字符串,计算字符串每一位的和,得到一个整数,将整数转化为字符串,接下来遍历所得到的字符串,在循环中使用switch(),依次输出每一位字符所对应的英文单词。 注意: 在字符串的最后一个字符输出时,不能加空格,否则会出现格式错误。将最后一个字符进行单独处理。
提交结果如下:
代码如下: 代码看起来较为冗余,但逻辑较为简单,内存和耗时都较小。
#include<iostream> #include<string> using namespace std; int main() { string n; cin>>n; int sum=0; for(int i=0;i<n.size();i++) { sum+=n[i]-'0'; } string str=to_string(sum); for(int i=0;i<str.size()-1;i++) { switch(str[i]) { case '1': cout<<"one"; break; case '2': cout<<"two"; break; case '3': cout<<"three"; break; case '4': cout<<"four"; break; case '5': cout<<"five"; break; case '6': cout<<"six"; break; case '7': cout<<"seven"; break; case '8': cout<<"eight"; break; case '9': cout<<"nine"; break; default: cout<<"zero"; break; } cout<<" "; } switch(str[str.size()-1]) //单独处理最后一个字符 { case '1': cout<<"one"; break; case '2': cout<<"two"; break; case '3': cout<<"three"; break; case '4': cout<<"four"; break; case '5': cout<<"five"; break; case '6': cout<<"six"; break; case '7': cout<<"seven"; break; case '8': cout<<"eight"; break; case '9': cout<<"nine"; break; default: cout<<"zero"; break; } }提交后,排名是35694。
