1350题给定一个四位数(4位数字不全相同),得到四个数字排出的最大值和最小值,最大值减最小值后得到的数字继续重复,直到所得的差为0或者6174结束。
此题感觉自己的字符串转与数字的转换做繁了,可以用atoi()和sprintf()函数,另外自己开始没有判断输入的是否是四位数,导致提交时提示output limit exceeded,搞了1个小时才发现这问题,读题还是非常重要啊!
#include<stdio.h>
#include<string.h>
int compar_a(const void *a, const void *b){
return (*(char *)a - *(char * )b);
}
int compar_d(const void *a, const void * b){
return (*(char * )b- *(char *)a);
}
char s[5];
char max[5];
char min[5];
void do_minus(char * max, char * min){
int i=1;
int num_max,num_min,result;
num_max=(max[0]-'0')*1000+(max[1]-'0')*100+(max[2]-'0')*10+(max[3]-'0');
num_min=(min[0]-'0')*1000+(min[1]-'0')*100+(min[2]-'0')*10+(min[3]-'0');
result=num_max-num_min;
printf("%d-%d=%d\n",num_max,num_min,result);
while((result != 6174)&&(result != 0)){
if(result/1000){
s[0]=result/1000+'0';
s[1]=(result%1000)/100+'0';
s[2]=(result%100)/10+'0';
s[3]=result%10+'0';
}
else{
s[0]=(result%1000)/100+'0';
s[1]=(result%100)/10+'0';
s[2]=result%10+'0';
s[3]='\0';
}
qsort(s,strlen(s),1,compar_d);
strcpy(max,s);
qsort(s,strlen(s),1,compar_a);
strcpy(min,s);
if(0 == strcmp(max,min)){
i++;
printf("%s-%s=0\n",max,min);
break;
}
num_max=(max[0]-'0')*1000+(max[1]-'0')*100+(max[2]-'0')*10+(max[3]-'0');
num_min=(min[0]-'0')*1000+(min[1]-'0')*100+(min[2]-'0')*10+(min[3]-'0');
result=num_max-num_min;
printf("%d-%d=%d\n",num_max,num_min,result);
i++;
} printf("Ok!! %d times\n",i);
}
void main(){
gets(s);
while(strcmp(s,"-1")){
printf("N=%s:\n",s);
qsort(s,strlen(s),1,compar_d);
strcpy(max,s);
qsort(s,strlen(s),1,compar_a);
strcpy(min,s);
if(0 == strcmp(max,min)||(4 != strlen(s)))
printf("No!!\n");
else
do_minus(max,min);
gets(s);
}
}
微信扫一扫,订阅我的博客动态^_^