1435 位数阶乘
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
![](https://file.51nod.com/images/icon/star.png)
![](https://file.51nod.com/images/icon/plus.png)
X是一个n位数的正整数 (x=a0a1...an−1)
现在定义 F(x)=∏i=0n−1(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
替换掉 输入数据中的数字 再从大到小排个序 输出
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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) {;}
作者:乌鸦坐飞机
出处:http://www.cnblogs.com/whistle13326/
新的风暴已经出现
怎么能够停止不前
穿越时空 竭尽全力
我会来到你身边
微笑面对危险
梦想成真不会遥远
鼓起勇气 坚定向前
奇迹一定会出现