给定一个各位数字不完全相同的四位正整数,如果先把四个数字按递减排序,再按递增排序,然后两者相减(大的减去小的),将会得到一个新的数字,对新的数字重复此步骤,很快就会停在数字黑洞“6147”
输入:
6767
输出:
7766-6677=1089
9810-0189=9621
9621-1269=8352
8532-2358=6174
输入:
3333
输出:
3333-3333=0000
分析:显然数字排序首要应把数字放进一个数组内,然后进行两次排序,一次递增一次递减,然后将数组数字合成整数进行相加减,大致代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
void toarray(int n,int num[])
{
for(int i=0;i<4;i++)
{
num[i]=n%10;
n=n/10;
}
}
int tosum(int num[])
{
int sum=0;
for(int i=0;i<4;i++)
{
sum=sum*10+num[i];
}
return sum;
}
bool cmp(int a,int b)
{
return a>b; //递减排序,获得最大数
}
int main()
{
int n,maxn,minn;
int num[8];
scanf("%d",&n);
while(1)
{
toarray(n,num);
sort(num,num+4);
minn=tosum(num); //得到最小值
toarray(n,num);
sort(num,num+4,cmp);
maxn=tosum(num); //得到最大值
n=maxn-minn;
printf("%d-%d=%d\n",maxn,minn,n);
if(n==0||n==6174) break;
}
return 0;
}