注:
这道题之前的做法是从前向后拆解sum的值,结果发现测试点1不通过。经过一番思考,原来是当我们从前往后拆解数时,会出现0在首位的情况。
例如:101,对10整除后我们会得到01,但是机器只会记录下1,因为我们是以整数保存的,故从前往后分解会出错。
下面的解法是将结果从后往前进行拆解,即对10取余。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <cstring>
#include <queue>
using namespace std;
int main()
{
char str[105];
char num[11][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
char res[105][5];
scanf("%s", str);
int sum = 0;
for (int i = 0; str[i] != '\0'; i++)
{
sum += str[i]-'0';
}
if (sum == 0)
{
printf("ling");
}
else
{
int t = 0;
while (sum > 0)
{
strcpy(res[t++], num[sum%10]);
sum /= 10;
}
for (int i = t-1; i >= 0; i--)
{
if (i == t-1)
{
printf("%s", res[i]);
}
else
{
printf(" %s", res[i]);
}
}
}
printf("\n");
return 0;
}