注意不满(4)位的话要补成(4)位。
string s;
set<int> S;
int main()
{
cin>>s;
while(s.size()<4) s='0'+s;
while(true)
{
sort(s.begin(),s.end(),greater<char>());
string sa=s;
reverse(s.begin(),s.end());
string sb=s;
int a=stoi(sa),b=stoi(sb);
int res=a-b;
if(S.count(res)) break;
else
{
printf("%04d - %04d = %04d
",a,b,res);
S.insert(res);
s=to_string(res);
while(s.size()<4) s='0'+s;
}
}
//system("pause");
return 0;
}
(update):
用数组的写法。
int a[5];
int n;
void get(int x)
{
for(int i=3;i>=0;i--)
a[i]=x%10,x/=10;
}
int calc()
{
int res=0;
for(int i=0;i<4;i++)
res=res*10+a[i];
return res;
}
int main()
{
cin>>n;
while(true)
{
get(n);
sort(a,a+4,greater<int>());
int maxv=calc();
reverse(a,a+4);
int minv=calc();
n=maxv-minv;
printf("%04d - %04d = %04d
",maxv,minv,n);
if(n == 0 || n == 6174) break;
}
//system("pause");
return 0;
}