题目内容
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:1234567890987654321123456789输出样例:
yi san wu
下面是我自己的思路以及代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char alpha[10][10] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
char a[100];
scanf("%s",&a);//读入字符串
int num = 0;
int i = 0;
while (a[i] != '\0')
{
num += a[i] - '0';
i++;
}//将字符串转成数字
char b[10];
i = 0;
while (1)
{
b[i] = num % 10 + '0';
i++;
num = num / 10;
if (!num)
break;
}
b[i] = '\0';//将数字转成字符串……,此时字符串是逆序的
char temp[10];//逆序
int j;
for (j = 0; j <= i; j++)
temp[j] = b[j];
for (j = 0; i > 0; )
b[j++] = temp[--i];
b[j] = '\0';
//逆序的另外一种方法
/*int j;
char temp;
for (j = 0; j < (i - 1) / 2; j++)
{
temp = b[j];
b[j] = b[i - 1 - j];
b[i - 1 - j] = temp;
}*/
//_itoa(num, b, 10);//或者使用库函数
//int len = strlen(b); 输出空格的另外一种方法
int count = 0;
while (b[count] != '\0')
{
if (count > 0)
printf(" ");
printf("%s", alpha[b[count] - '0']);
//if (count < len - 1)
// printf(" ");
count++;
}
}
#include <stdio.h>
int main()
{
int num = 0;
char c;
char a[10];
char alpha[10][10] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
while ((c = gtchar()) != '\n')
num += (c - 48);//计算字符串各位相加得到的数
sprintf(a, "%d", num);//将数转成字符串
for (int count = 0; a[count] != 0; count++)
{
if (count > 0)
printf(" ");
printf("%s", alpha[a[count] - '0']);
}
return 0;
}