Tuesday, 2 February 2016

Light OJ 1189 Sum of Factorials

#include<bits/stdc++.h>
using namespace std;
long long int fact(int n)
{
    if(n==1)
        return 1;
    else if(n==0)
        return 1;
    else
        return n*fact(n-1);
}
int main()
{
    long long int n,i,j,k,l,m,test,a[25],b[25];
    a[0]=1;
    for(i=1;i<=20;i++)
    {
        a[i]=fact(i);
    }
    cin>>test;
    for(j=1;j<=test;j++)
    {
        cin>>n;
        cout<<"Case "<<j<<": ";
        if(n==1)
            cout<<"1!"<<endl;
        else if(n==2)
            cout<<"2!"<<endl;
        else if(n==3)
            cout<<"1!+2!"<<endl;
        else
        {
            k=0;
            bool flag=1;
            for(i=20;i>=0;i--)
            {
                if(n<a[i])
                {
                    continue;
                }
                if(n>=a[i])
                {
                    n=n-a[i];
                    b[k++]=i;
                }
                if(n==0)
                {
                    flag=1;
                    break;
                }
                if(n<0||(n!=0&&i==0))
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                sort(b,b+k);
                for(i=0;i<k;i++)
                {
                    cout<<b[i]<<"!";
                    if(i!=k-1)
                        cout<<"+";
                }
                cout<<endl;
            }
            else
            {
                cout<<"impossible"<<endl;
            }
        }
    }
    return 0;
}

No comments:

Post a Comment