//Problem link>>http://www.lightoj.com/volume_showproblem.php?problem=1189
#include <bits/stdc++.h>
#define mx 1000000000000000000
long long int a[100] , i ,fact=1 , n ;
using namespace std ;
int main ()
{
map<long long int , long long int> mp ;
int t , it=0 , y ;
for (i=1 ; fact<=mx ; i++)
{
fact=fact*i ;
a[i]=i ;
mp[i]=fact ;
y=i ;
}
mp[0]=1 ;
a[0]=0 ;
cin>>t ;
while (it<t)
{
it++ ;
cin>>n ;
vector<long long int>v ;
int p=0 , ny=y ;
while (n)
{
int k =0 ;
for (i=0 ; i<ny ; i++)
{
if (mp[i]>n) break ;
k=i ;
}
v.push_back(k) ;
ny=k ;
n=n-mp[k] ;
if (n>mp[k])
{
p=1 ; break ;
}
}
reverse (v.begin() , v.end()) ;
cout<<"Case "<<it<<": " ;
if (p==0)
{
for (i=0 ; i<v.size() ; i++)
{
if (i==0) printf ("%lld!",v[i]) ;
else printf ("+%lld!",v[i]) ;
}
cout<<endl ;
}
else cout<<"impossible"<<endl ;
}
return 0 ;
}
#include <bits/stdc++.h>
#define mx 1000000000000000000
long long int a[100] , i ,fact=1 , n ;
using namespace std ;
int main ()
{
map<long long int , long long int> mp ;
int t , it=0 , y ;
for (i=1 ; fact<=mx ; i++)
{
fact=fact*i ;
a[i]=i ;
mp[i]=fact ;
y=i ;
}
mp[0]=1 ;
a[0]=0 ;
cin>>t ;
while (it<t)
{
it++ ;
cin>>n ;
vector<long long int>v ;
int p=0 , ny=y ;
while (n)
{
int k =0 ;
for (i=0 ; i<ny ; i++)
{
if (mp[i]>n) break ;
k=i ;
}
v.push_back(k) ;
ny=k ;
n=n-mp[k] ;
if (n>mp[k])
{
p=1 ; break ;
}
}
reverse (v.begin() , v.end()) ;
cout<<"Case "<<it<<": " ;
if (p==0)
{
for (i=0 ; i<v.size() ; i++)
{
if (i==0) printf ("%lld!",v[i]) ;
else printf ("+%lld!",v[i]) ;
}
cout<<endl ;
}
else cout<<"impossible"<<endl ;
}
return 0 ;
}
No comments:
Post a Comment