【PAT】B1019

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
struct digs{
int dig[10];
int len;
digs()
{
dig[10] = {0};
len = 0;
}
};
void to_array(int n,digs &d)
{
while(n)
{
d.dig[d.len++] = n%10;
n /= 10;
}
}
int to_number(digs d)
{
int i = d.len-1;
int t = 0;
int result = 0;
for(;i >= 0;i--,t++)
{
result = result + d.dig[i]*((int)pow(10,t));
}
return result;
}
bool cmp_less(int &a,int &b)
{
return a>b;
}
int main()
{
int n;
while(cin >> n)
{
while(1)
{
digs d;
to_array(n,d);
sort(d.dig,d.dig+d.len);
int min = to_number(d);
sort(d.dig,d.dig+d.len,cmp_less);
int max = to_number(d);
n = max - min;
printf("%04d - %04d = %04d\n",max,min,n);
if(n == 0 || n == 6174) break;
}
}
/* for(int i = 0;i < d.len;i++)
{
cout << d.dig[i]<< ' ';
}
cout << endl;
*/
return 0;
}