[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
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务