题目翻译
现在有一个非负整数N,你的任务是计算它的每一位上的数字的和并且输出和的每一位上的数字的英文。
输入格式
每一个输入文件包含一个测试样例。每一个样例在一行上输出一个N(\(\leq100^{100}\)).
输出格式
对于每一个测试样例,在一行中输出和的每一位的英文单词。每两个连续的单词之间必须有一个空格,行尾没有空格。
样例输入
12345
样例输出
one five
分析:题目很短,理解起来应该也不难。大意就是先把N的每一位上的数加起来,再把这个和的每一位对应的英文单词输出。我们可以先把从0到9对应的英文单词存在一个字符串常量数组里,以后直接读这个数组就行。之后用一个循环来求和,然后读取这个和的每一位。我这里用了一个sprintf函数,把这个和转成了字符串类型(其实是因为懒得写取余的循环……),这个函数还是挺方便的,建议大家了解一下。
我们经常用的printf()函数是把给定的数据类型转成字符串类型输出到标准输出流中,也就是控制台里。sprintf()函数就是把这个字符串输出到指定的字符数组里,很适合做这种题目。
之后就是逐个读取这个字符串的每一个字符,把它减掉‘0’就是对应的数值了。
#include <stdio.h>
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
const char *num[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
int cot = 0;
string s;
char ans[100] = {0};
cin >> s;
for (int i = 0; i < s.length(); i++)
cot += s[i] - '0';
sprintf(ans, "%d", cot);
int i;
for (i = 0; ans[i + 1] != '\0'; i++)
printf("%s ", num[ans[i] - '0']);
printf("%s", num[ans[i] - '0']);
return 0;
}