题目地址
解题思路
数字按位拆分重组,循环做差。
注意打印的所有数字都要保证是4位!
PS.被大神说了,我再也不暴力求解了,以后都用循环。。。
AC代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp( int a,int b ){
return a>b;
}
/*数组存放各位数,以保证打印出的数字是四位*/
int s[4];
void trans( int n ){
for( int i=3;i>=0;--i ){
s[i] = n%10;
n /= 10;
}
}
int main()
{
int n;
cin>>n;
int a[4];//存放差的各位数
int result = n;
while( 1 ){//不能用while(result!=6174),因为输入6174也需要打印一遍做差过程
for( int i=3;i>=0;--i ){
a[i] = result%10;
result /= 10;
}
sort( a,a+4,cmp );
int n1 = a[0]*1000+a[1]*100+a[2]*10+a[3];
int n2 = a[0]+a[1]*10+a[2]*100+a[3]*1000;
result = n1 - n2;
trans(n1);
for( int i=0;i<4;++i ) cout<<s[i];
cout<<" - ";
trans(n2);
for( int i=0;i<4;++i ) cout<<s[i];
cout<<" = ";
trans(result);
for( int i=0;i<4;++i ) cout<<s[i];
cout<<endl;
if( result==6174 || ( a[0]==a[1] && a[1]==a[2] && a[2]==a[3] ) )
break;
}
return 0;
}