ACM-ICPC 2012 国内予選 Problem B 繰り返す10進数

繰り返す10進数

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int next( int a, int L )
{
    vector<int> T(L);
    for ( int i=0; i<L; i++ )
        T[i] = a%10, a/=10;
    sort(T.begin(),T.end());

    int mx = 0;
    int mn = 0;
    for ( int i=0; i<L; i++ )
    {
        mx *= 10;
        mn *= 10;
        mx += T[L-i-1];
        mn += T[i];
    }
    return mx - mn;
}

int main()
{
    while ( true )
    {
        int a, L;  cin >> a >> L;
        if ( a==0 && L==0 )
            break;

        vector<int> A;
        set<int> B;
        A.push_back(a);
        B.insert(a);

        while ( true )
        {
            a = next(a,L);
            if ( B.count(a)>0 )
            {
                int i = A.size();
                int j;
                for ( j=0; ; j++ )
                    if ( A[j]==a )
                        break;
                cout << j << " " << a << " " << i-j << endl;
                break;
            }
            A.push_back(a);
            B.insert(a);
        }
    }

    return 0;
}