输入一个n位数,把所有数字从大到小排序得到a,从小到大得到b,然后用a-b替换原来这个数
并且继续操作。1234 、4321-1234=3087、8730-378=8352、8532-2358=6174
样例输入:1234
并且继续操作。1234 、4321-1234=3087、8730-378=8352、8532-2358=6174
样例输入:1234
样例输出:1234->3087->8352->6074->6174
#include <iostream>
using namespace std;
int get_x(int x);
int num[100],count;
int main()
{
bool flag = false;
cin>>num[0];
cout<<num[0];
count = 1;
while(1)
{
num[count] = get_x(num[count - 1]);
cout<<"->"<<num[count];
for(int i = 0;i<count;++i) //检查是否出现重复,出现重复则退出
{
if(num[i] == num[count])
{
flag = true; //改变标志位的值
break;
}
}
if(flag)
break;
count++;
}
cout<<endl;
return 0;
}
int get_x(int x)
{
int i, j, a, b,buf[4];
i = 0;
while(x != 0) //拆位
{
buf[i] = x%10;
++i;
x /= 10;
}
for(i = 0; i < 4-1; ++i) //冒泡排序,从小到大排序
{
for(j = 0;j < 4 - i - 1; ++j)
{
int temp;
if(buf[j] > buf[j+1])
{
temp = buf[j];
buf[j] = buf[j+1];
buf[j+1] = temp;
}
}
}
a = buf[0]*1000 + buf[1]*100 + buf[2]*10 + buf[3];//得到大值
b = buf[3]*1000 + buf[2]*100 + buf[1]*10 + buf[0];//得到小值
return b - a;
}