poj1350 Cabric Number Problem

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);
    }
}
您的支持将鼓励我继续创作!