如今有一个非负整数N,你的任务是计算它的每一位上的数字的和而且输出和的每一位上的数字的英文。ios
每个输入文件包含一个测试样例。每个样例在一行上输出一个N(\(\leq100^{100}\)).c++
对于每个测试样例,在一行中输出和的每一位的英文单词。每两个连续的单词之间必须有一个空格,行尾没有空格。数组
12345
one five
分析:题目很短,理解起来应该也不难。大意就是先把N的每一位上的数加起来,再把这个和的每一位对应的英文单词输出。咱们能够先把从0到9对应的英文单词存在一个字符串常量数组里,之后直接读这个数组就行。以后用一个循环来求和,而后读取这个和的每一位。我这里用了一个sprintf函数,把这个和转成了字符串类型(实际上是由于懒得写取余的循环……),这个函数仍是挺方便的,建议你们了解一下。函数
咱们常常用的printf()函数是把给定的数据类型转成字符串类型输出到标准输出流中,也就是控制台里。sprintf()函数就是把这个字符串输出到指定的字符数组里,很适合作这种题目。测试
以后就是逐个读取这个字符串的每个字符,把它减掉‘0’就是对应的数值了。spa
#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; }