假设有一个各位互不相同的四位数,把所有的数字从大到小排序后得到 a,从小到大排序后得到 b,然后用 a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087,8730-378=8352,8532-2358=6174,7614-1467=6174。输入一个 n位数,输出操作序列,直至出现循环。输入保证在循环之前最多只会产生1000个整数。
样例输入:
1234
样例输出:
1234->3087->8352->6174->6174
解:
将输入的数进行每一位分解,放在数组中,然后进行排序(此处使用sort进行排序)然后按照题意进行操作,此处需要注意的是控制循环结束的条件放置位置。
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int cmp1(int x,int y){
if(x>y)
return 1;
else return 0;
}
int cmp2(int x,int y)
{
if(y>x)
return 1;
else return 0;
}
int change(int x)
{
int z[100]={0};
int i=0;
int a,b;
a=b=0;
while(x)
{
z[i++]=x%10;
x=x/10;
}
sort(z,z+i,cmp1);
for(int j=0;j<i;j++){
a=a*10+z[j];
}
sort(z,z+i,cmp2);
for(int j=0;j<i;j++){
b=b*10+z[j];
}
return a-b;
}
int main()
{
int x;
while(~scanf("%d",&x))
{
int num1,num2;
printf("%d",x);
num1=x;
while(1)
{
num2=change(num1);
printf("->%d",num2);
if(num1==num2)
break;
num1=num2;
}
printf("\n");
}
return 0;
}