PAT BASIC 1019 数字黑洞
题设:https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
题解:
使用sprintf函数、atoi函数和qsort函数能够很好地简化代码,不需要自己去实现字符串和整数的互转,排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char input[5];
char desc[5]; // 存储降序的数字
char asce[5]; // 存储升序的数字
int comp(char *a, char *b){
return *a - *b;
}
int compdesc(char *a,char *b){
return -comp(a,b);
}
int main(){
int n;
scanf("%d",&n);
sprintf(input,"%04d",n);
while(1){
memcpy(desc,input,5);
memcpy(asce,input,5);
qsort(desc,4,sizeof(char),compdesc);
qsort(asce,4,sizeof(char),comp);
int a = atoi(desc);
int b = atoi(asce);
int result = a - b;
if(result == 6174 || result == 0){
printf("%04d - %04d = %04d",a,b,result);
break; // 结果为6174时结束, 为0时说明输入数字四位都相同,也结束
}else{
printf("%04d - %04d = %04d\n",a,b,result);
}
sprintf(input,"%04d",result);
}
return 0;
}