1435 位数阶乘

                                                                                        1435 位数阶乘

题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
 收藏
 关注

X是一个n位数的正整数 (x=a0a1...an1) 

现在定义 F(x)=i=0n1(ai!)  , 比如F(135)=1!*3!*5!=720.

我们给定一个n位数的整数X(至少有一位数大于1,X中可能有前导0),

然后我们去找一个正整数(s)符合以下条件:

1.这个数尽可能大,

2.这个数中不能含有数字0或1。

3.F(s)=F(x)

Input
每个测试数据输入共2行。
第一行给出一个n,表示x为中数字的个数。(1<=n<=15)
第二行给出n位数的正整数X(X中至少有一位数大于1)
Output
共一行,表示符合上述条件的最大值。
Input示例
4
1234
Output示例
33222

乱搞啊
把2-9的阶乘分解成质数相乘
比如9!=7*3*3*2
替换掉 输入数据中的数字 再从大到小排个序 输出

 1 #include <cstdio>
 2 #include <cctype>
 3 #include <algorithm>
 4 
 5 const int MAXN=20;
 6 
 7 int n,sum;
 8 
 9 int ans[MAXN*MAXN];
10 
11 int t[MAXN]={0,0,2,3,322,5,53,7,7222,7332};
12 
13 inline void read(int&x) {
14     int f=1;register char c=getchar();
15     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
16     for(;isdigit(c);x=x*10+c-48,c=getchar());
17     x=x*f;
18 }
19 
20 inline bool cmp(int a,int b) {
21     return a>b;
22 }
23 
24 int hh() {
25     read(n);
26     char c;
27     for(int i=1;i<=n;++i) {
28         scanf("%c",&c);
29         if((c-48)>1) {
30             int p=t[c-48];
31             while(p) ans[++sum]=p%10,p/=10;
32         }
33     }
34     std::sort(ans+1,ans+sum+1,cmp);
35     for(int i=1;i<=sum;++i) printf("%d",ans[i]);
36     return 0;
37 }
38 
39 int sb=hh();
40 int main(int argc,char**argv) {;}
代码

 

posted @ 2017-09-17 16:00  拿叉插猹哈  阅读(148)  评论(0编辑  收藏  举报