git在这–>https://github.com/Tiandragon/PAT-Grade-B.git

1002 写出这个数 (20 分)

读入一个正整数 ,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数  的值。这里保证  小于 

输出格式:

在一行内输出  的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

思路

用数组

把输入的每个数字都存入数组[0-->n-1],然后计算数组的和

然后用除10取余,除100取余......

递归????

int abc(int a) //用递归把各个位的数提出来
{
if(a>=10)
{
abc(a/10);
}
printf(“%d “,a%10);
}

得到各位数字作为接下来数组的下标

然后再用数组[0-9]存放拼音ling到jiu

switch

代码


#include <stdio.h>
#include <math.h>
#include <ctype.h>
/*int abc(int a) //用递归把各个位的数提出来 
{
  	if(a>=10)
  	{
       	abc(a/10);
	}
  	printf("%d ",a%10);
}*/
int main()
{
	int sum=0;//数组的和 
    char ch[10000];//能处理10^100以内的数
    char pingyin[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char *n=ch; //指针指向数组地址 
	scanf("%s",ch);//将字符串存入数组 
	//printf("%s\n", ch);//查看是否存入 
	do
	{
		sum=sum+(*n-'0');//将字符串数组转成整型数组并相加 
		n++;//指向下一个数字 
	}while(*n!='\0');//循环到结束符 
	//printf("%d\n", sum);//查看是否相加成功
	//abc(sum);
	if(sum>999)
	{
		printf("%s ",pingyin[sum/1000]);
		printf("%s ",pingyin[sum%1000/100]);//百位 
		printf("%s ",pingyin[sum%1000%100/10]);//十位 
		printf("%s",pingyin[sum%1000%100%10]);//个位 
	}
	else if(sum>99)
	{
		printf("%s ",pingyin[sum/100]);//百位 
		printf("%s ",pingyin[sum%100/10]);//十位 
		printf("%s",pingyin[sum%100%10]);//个位 
	}
	else if(sum>9)
	{
		printf("%s ",pingyin[sum/10]);//十位
		printf("%s",pingyin[sum%10]);//个位 
	}
	else
	{
		printf("%s",pingyin[sum]);
	}
	return 0;
}

PTA提交结果

总结

输了输了,最后还是参考其他人的思路,因为无论如何之前求得的数字和都不会多过四位数,把最后的计算结果分成四段进行0~99;10~99;99~999;999~无穷

苏ICP备18039385号