思路:核心是找到数值与字符串互相转化的方法,还要考虑高位补0。cstdio中天然有一个利器,那就是sprintf()和sscanf()两个函数。数值有4位,转换时,字符数组大小要定为5,因为要接收最后的 ‘\0’,否则提交后会出现运行时错误。
#include <cstdio>
#include <algorithm>
int num_to_dec(int a);
int num_to_inc(int a);
bool cmp_dec(char a, char b);
bool cmp_inc(char a, char b);
int main(){
int num;
scanf("%d", &num);
while(true){
int num_dec = num_to_dec(num);
int num_inc = num_to_inc(num);
num = num_dec - num_inc;
printf("%04d - %04d = %04d\n", num_dec, num_inc, num);
if(num==0 || num==6174) break;
}
return 0;
}
int num_to_dec(int a){
char n[5];
sprintf(n, "%04d", a);
std::sort(n, n+4, cmp_dec);
int value=0;
for(int i=0; i<4; i++){
value = value*10+(n[i]-'0');
}
return value;
}
int num_to_inc(int a){
char n[5];
sprintf(n, "%04d", a);
std::sort(n, n+4, cmp_inc);
int value=0;
for(int i=0; i<4; i++){
value = value*10+(n[i]-'0');
}
return value;
}
bool cmp_dec(char a, char b){
return (int)a>(int)b;
}
bool cmp_inc(char a, char b){
return (int)a<(int)b;
}
来源:CSDN
作者:dantahejichi
链接:https://blog.csdn.net/sinat_37517996/article/details/104136170