For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 – the black hole of 4-digit numbers. This number is named Kaprekar Constant.
For example, start from 6767, we’ll get:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.
- 频繁使用的转换可封装成函数
- 输出格式非常重要
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
void num_to_array(int n,int a[]){
for(int i=0;i<4;i++){
a[i]=n%10;
n/=10;
}
}
int array_to_num(int a[]){
int n=0;
for(int i=0;i<4;i++){
n=n*10+a[i];
}
return n;
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,a[4];
scanf("%d",&n);
num_to_array(n,a);
do{
int n1,n2;
sort(a,a+4);
n1=array_to_num(a);
sort(a,a+4,cmp);
n2=array_to_num(a);
n=n2-n1;
printf("%04d - %04d = %04d\n",n2,n1,n);
/*%d左对齐,输出变量的所有数字;
%4d右对齐,宽度为4,左边填充空格,当变量的实际宽度大于4时,输出变量的所有数字;
%04d与%4d的唯一区别就是左边填充0。*/
num_to_array(n,a);
}while(n!=6174&&n!=0);
return 0;
}