lightoj1189
来源:互联网 发布:费曼feynman知乎 编辑:程序博客网 时间:2024/05/20 10:51
求一个数的阶乘进制的表达,同数的二进制表达一样,从上往下贪心。
LL A[23];void init(){ A[0] = A[1] = 1LL; for (int i = 2;i < 21;++i) A[i] = A[i-1]*i;}int main(){ // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int icase=0,t; init(); cin >> t; while(t--){ LL n; cin >> n; vector<int> vec; for (int i = 20;i >= 0;--i){ if (n >= A[i]){ n -= A[i]; vec.push_back(i); } } printf("Case %d: ",++icase); if (n != 0){ printf("impossible\n"); continue; } sort(vec.begin(),vec.end()); for (int i = 0;i < vec.size();++i){ if (i != 0) printf("+"); printf("%d!",vec[i]); } printf("\n"); } return 0;}
0 0