题目链接在此。
思路
写好两个函数:数组转数字、数字转数组。
之后的思路就很明显了,直接看代码。
AC代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){ //非递增排序
return a > b;
}
//将数字准换成数组
void num_to_array(int n, int a[]){
for(int i = 0; i < 4; i++){
a[i] = n%10; //数组a[]的地位记录n的低位
n /= 10;
}
}
//将数组转换成数字
int array_to_num(int a[]){
int sum = 0;
for(int i = 0; i < 4; i++){
sum = sum *10 + a[i];
}
return sum;
}
int main(){
int n;
scanf("%d",&n);
int num[4];
int min,max; //得到的最小数,最大数
while(1){
num_to_array(n,num); //将输入转换成一个数组,方便排序
sort(num,num+4,cmp); //非递增排序
max = array_to_num(num); //将数组转换成数字得到了最大数
num_to_array(n,num); //再次转换成数组
sort(num,num+4); //非递减排序
min = array_to_num(num); //将数组转换成数字得到了最大数
int res = max-min;
n = res; //为下一次做准备
printf("%04d - %04d = %04d\n",max,min,res);
if(res == 0 || res == 6174) break;
}
return 0;
}