PAT乙级 1002 写出这个数

PAT乙级 1002 写出这个数



第一次提交的代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
 *读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字 
*/

char pinyin[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"
};

int main(void){
	/* 由于输入n要求小于10^100,从而要用数组来保存n */
	char n[101]; //大小设置为101,为了在n有100位时有空间保存'\0' 
	int sum=0, len, *index;
	int i;
	scanf("%s", n);
	len = strlen(n);
	for(i=0; i<len; i++){
		sum += (n[i]-48);
	}
	//printf("sum=%d\n",sum);
	if(sum!=0){
		index = (int *)malloc(len*sizeof(int));
		i = 0;
		while(sum){
			index[i++] = sum%10;
			sum /= 10;
		}
		while(--i){
			printf("%s ",pinyin[index[i]]);
		}
		printf("%s\n",pinyin[index[i]]);
		free(index);
	}
	else{
		printf("ling\n");
	}
	return 0; 
} 

第二次提交的代码(修改部分)

不再使用一个数组来完整保存n的每一位,而是通过getchar()来读取输入,从而节省了空间。

	//用getchar的方式获取n,需要保证输入行没有多余的空白字符 
	while((ch=getchar())!='\n'){
		sum += (ch-48);
		len ++; 
	}
	//printf("sum=%d\n",sum);

两次提交后的结果截图

在这里插入图片描述

在这里插入图片描述

对比两次结果,发现改进后的内存消耗变少了~


版权声明:本文为Seven_7_Sunny原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。