原题
Description
任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。Input
输入数据有多组,每组占一行,每行包含一个4位自然数N。输入文件直到EOF为止!Output
对每组输入,输出有2行。第一行是所有的差,以空格分隔,最后一个数后也有空格;第二行是差的个数。思路
把整数拆开放到数组中,对数组排序,即得到由各位数字排列得的最大值和最小值。最大值减最小值得到下一个数,进入循环。直到得到6174,退出循环。AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[4]={0};
int i,max=0,min=0,j=1,n;
while(scanf("%d",&n)!=EOF)
{
while(1)
{
for(i=0;i<4;i++)
{
a[i]=n%10;
n=n/10;
}
sort(a,a+4);
max=0;min=0;
for(i=0;i<4;i++)
{
min=min*10+a[i];
}
for(i=3;i>=0;i--)
{
max=max*10+a[i];
}
n=max-min;
if(n==6174)
{
cout<<n<<" "<<endl;
cout<<j<<endl;
j=1;
break;
}
else
{
cout<<n<<" ";
j++;
}
}
}
}