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版权协议,转载请附上原文出处链接和本声明。
