思路: 1 需要两个函数 int型整数转换成int型数组的to_array,(即把每一位都当成数组的一个元素)
int型数组转换成int型整数的to_number。
2 写一个while循环,对每层循环:用toarray转换成数组 递增排序,然后再tonumber转换成整数MIN.
数组 递减排序 然后再转换成整数MAX。
3 令n=MAX-MIN 为下一个数。并输出当前信息。
4 得到0或6174则退出循环。
****不足四位的数高位补0 eg:0189
#include <cstdio>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){//递减 从大到小
return a>b;
}
void toarray(int n,int num[]){//将n的每一位存到num数组里
for(int i=0;i<4;i++){
num[i]=n%10;
n/=10;
}
}
int tonumber(int num[]){
int sum=0;
for(int i=0;i<4;i++){
sum = sum*10+num[i];
}
return sum;
}
int main(){
int n,MAX,MIN;
scanf("%d",&n);
int num[5];
while(1){
toarray(n,num);
sort(num,num+4);//默认是从小到大
MIN = tonumber(num);
sort(num,num+4,cmp);// 从大到小
MAX = tonumber(num);
n=MAX-MIN;
printf("%04d - %04d = %04d\n",MAX,MIN,n);//%04d补齐四位 注意空格 不然格式不对啊
if(n==0||n==6174) break;
}
return 0;
}