题目描述
对于任何各位数字不完全相同的四位整数,我们将该数字的四个数位按非升序排列,得到一个数字,再按非降序排列,得到另一个数字,将两个数字相减就能得到一个新的数字。
不断重复这个过程,我们就能得到数字6174
---- 这是四位数字的黑洞。
例如,给定数字 6767
,过程如下:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
......
给定任意一个四位数字,请你输出它进入黑洞的过程。
输入格式
包含一个正整数 N。
注意,给定数字 N 如果不足四位,则补充前导 0 至四位为止。
C++ 代码
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
string s1,s2;
int main(){
cin>>s1;
sort(s1.begin(),s1.end());
s2=s1;
reverse(s2.begin(),s2.end());
for(int i=0;i<4;i++){
if(i>=s2.size()) s2+='0';
}
int t1=atoi(s1.c_str());
int t2=atoi(s2.c_str());
printf("%04d - %04d = %04d\n",t2,t1,t2-t1);
while(t2-t1!=0&&t2-t1!=6174){
string str1=to_string(t2-t1);
sort(str1.begin(),str1.end());
string str2=str1;
reverse(str2.begin(),str2.end());
int d1=atoi(str1.c_str());
for(int i=0;i<4;i++){
if(i>=str2.size()) str2=str2+'0';
}
int d2=atoi(str2.c_str());
printf("%04d - %04d = %04d\n",d2,d1,d2-d1);
t2=d2,t1=d1;
}
return 0;
}