您的位置:首页 > 其它

PAT-B 1002 写出这个数 (20)

2016-08-01 20:18 183 查看


题目内容

读入一个自然数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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: