PAT Advanced Level 1005 Spell It Right

原题传送门

1. 问题描述

2. Solution

1、思路分析
题意:
给定一个整数n,把n的各个数位上的数字求和,把和用英语单词输出。如,给定n=12345,各个数位上的和为1+2+3+4+5=15,则输出one five。
分析:
输入的整数到了100次方量级,用int有溢出的风险。只能按字符串读入,按位求和。然后,遍历和,逐位输
出英语单词(使用字符串单词map)。

2、代码实现

// PAT Advance Level 1005 // Ye Qiu #include <iostream> #include <cstdio> #include <string> #include <algorithm>  using namespace std;  int main() { #ifdef ONLINE_JUDGE #else     freopen(input/1005.txt, r, stdin); #endif     string numEngMap[10] = {zero, one, two, three, four, five, six, seven, eight, nine};     string s;     cin >> s;     int res = 0;     for (char c: s)         res += c - '0';     string strRes = to_string(res);     for (int i = 0; i < strRes.length(); i++) {         if (i) printf( );         printf(%s, numEngMap[strRes[i] - '0'].c_str());     }     return 0; } 

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(1)