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
原创粉丝点击