Saturday 5 May 2012

UVa 263 Number Chains Solution

#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back

int main()
{
    long long n,a[1000],i,j,x,nc,big,small;
    string s,s1,s2;
    map<string,long long>M;
    while(cin>>n)
    {
        if(n==0)    return 0;
        nc=1;
        M.clear();
        stringstream ss;
        ss<<n;
        s=ss.str();
        cout<<"Original number was "<<n<<endl;
        while(1)
        {
            clr(a);
            for(i=0;i<s.length();i++)
            a[i]=s[i]-'0';
        sort(a,a+s.length());
        s1=s2="";
        for(i=0,j=s.length()-1;i<s.length();i++,j--)
            {
            s1+=a[i]+'0';
            s2+=a[j]+'0';
            }
        stringstream ss1(s1);
        ss1>>small;
        stringstream ss2(s2);
        ss2>>big;
        x=big-small;
        stringstream ss3;
        ss3<<x;
        s=ss3.str();
        cout<<big<<" - "<<small<<" = "<<x<<endl;
        if(M[s]==1) break;
        else M[s]=1;
        nc++;
        }
    cout<<"Chain length "<<nc<<endl<<endl;
    }
return 0;
}

No comments:

Post a Comment