[PAT解题报告] Spell It Right
输入一个非负整数n,求这个数各个数字的和,并输出英文(每一位输出一个数字),比如15,最终输出one five.
分析: n有10100那么大。显然用int, long
long都是不够的,java当然可以用自带的BigInteger,对于C/C++,我们可以用字符串读入这些数。求各个数字之和也很简单,直接加即可——对于C/C++,字符c
-
'0'就得到了对应的整数。这个和显然不会太大——不超过900,因为最大就是100个9。然后我们把这个和的各个数字截出来,输出即可。截取各个数字,可以像1001那样用除法,不断除以10即可。更简单的方法是使用sprintf,再把结果写回到字符串,再一位一位输出。关于输出,要注意可以提前把0-9的英文都存下来——存一个字符串数组,再输出就行了。还要注意输出第一个数字之前没有空格。
代码:
#include <cstdio> #include <cstring> #include <string> using namespace std; char s[105]; const char *a[] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; int main() { scanf("%s",s); int sum = 0; for (const char *t = s; *t; ++t) { sum += *t - '0'; } sprintf(s,"%d",sum); for (const char *t = s; *t; ++t) { if (t != s) { putchar(' '); } printf("%s",a[*t - '0']); } puts(""); return 0; }原题链接: http://www.patest.cn/contests/pat-a-practise/1005