• 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) {;}
    代码
  • 相关阅读:
    hashlib加密算法
    gc 模块常用函数
    functools函数中的partial函数及wraps函数
    ctime使用及datetime简单使用
    __new__方法理解
    __getattribute__小例子
    == 和 is 的区别
    线程_可能发生的问题
    线程_进程池
    【网站】 简单通用微信QQ跳转浏览器打开代码
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7535890.html
Copyright © 2020-2023  润新知