51nod 1435 位数阶乘

1435 位数阶乘

题目来源: CodeForces

基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

 收藏

 关注

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

看看每一个数可以分解为哪些数 处理一遍就可以了
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN     freopen("input.txt","r",stdin);
#define FOUT    freopen("output.txt","w",stdout);
#define INF     0x3f3f3f3f
#define INFLL   0x3f3f3f3f3f3f3f
#define lson    l,m,rt<<1
#define rson    m+1,r,rt<<1|1
typedef long long LL;
typedef pair<int, int> PII;
using namespace std;

char ch[20];
int cnt[10];

int main() {
    //FIN
    int n;
    while(~scanf("%d", &n)) {
        memset(cnt, 0, sizeof(cnt));
        scanf("%s", ch);
        for(int i = 0; i < n; i++) cnt[ch[i] - ‘0‘]++;
        int tmp = cnt[9];
        cnt[3] += (tmp * 2);
        cnt[2] += tmp;
        cnt[7] += tmp;
        cnt[9] = 0;

        tmp = cnt[8];
        cnt[7] += tmp;
        cnt[2] += (tmp * 3);
        cnt[8] = 0;

        tmp = cnt[6];
        cnt[5] += tmp;
        cnt[3] += tmp;
        cnt[6] = 0;

        tmp = cnt[4];
        cnt[3] += tmp;
        cnt[2] += (tmp * 2);
        cnt[4] = 0;

        cnt[1] = 0;
        cnt[0] = 0;
        for(int i = 9; i >= 0; i--) {
            if(cnt[i] == 0) continue;
            for(int j = 1; j <= cnt[i]; j++) printf("%d", i);
        }
        printf("\n");

    }

    return 0;
}

  

时间: 2024-12-10 12:00:17

51nod 1435 位数阶乘的相关文章

1435 位数阶乘

1435 位数阶乘 基准时间限制:1 秒 空间限制:131072 KB 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为中数字的个数.(

51Nod1435 位数阶乘

Problem X是一个n位数的正整数 (??=??0??1...?????1) 现在定义 F(x)=∏??=0???1(????!) , 比如F(135)=1!3!5!=720. 我们给定一个n位数的整数X(至少有一位数大于1,X中可能有前导0), 然后我们去找一个正整数(s)符合以下条件: 1.这个数尽可能大, 2.这个数中不能含有数字0或1. 3.F(s)=F(x) Solution 把2到9阶乘拆开,发现质因子7的时候必选7或8或9,但8和9能拆开,这样数位更多,更优,向下同理,因此拆成

精度计算-大数阶乘

精度计算-大数阶乘 本算法的目的在于计算一个比较大的数的阶乘,由于得到的结果比较大,是现有的数据类型无法存储的,所以我决定将结果存储在一个long a[]数组中. 我们的思路是把每4位数看做数组的一个元素来存储,例如:个.十.百.千存在a[0],万.十万.百万.千万存在a[1]以此类推. 我们用10的阶乘来模拟一下求结果大于4位数阶乘的过程,9的阶乘为362880,而10的阶乘为9的阶乘乘以10,在计算完9的阶乘时a[0] = 2880,a[1]=36,因为362880*10 = (36*10+

乘法与位数

题目意思: 给你一个数,然后转化成相应进制的数,算出阶乘以后,求阶乘的位数 阶乘的位数我们这么来算: 例如1000的阶乘log10(1) + log10(2) + ...+log10(1000) 取整后加1 然后转化成进制的话就是: 除以log10(base) 后加1 题目: Description Factorial of an integer is defined by the following function f(0) = 1 f(n) = f(n - 1) * n, if(n > 0

算法笔记_211:第七届蓝桥杯软件类决赛部分真题(Java语言A组)

目录 1 阶乘位数 2 凑平方数 3 棋子换位 4 机器人塔 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 阶乘位数 阶乘位数 9的阶乘等于:362880 它的二进制表示为:1011000100110000000 这个数字共有19位. 请你计算,9999 的阶乘的二进制表示一共有多少位? 注意:需要提交的是一个整数,不要填写任何无关内容(比如说明解释等) 答案:118445 1 import java.math.BigInteger; 2 3 public class Main { 4 5

ACM新生国庆训练专场

题目B:DFS Problem Description 一个DFS(digital factorial sum)数是指各个位数的阶乘的和等于他本身的数.比如说145=1!+4!+5!,所以145是一个DFS数.现在请你找出 [1, 2147483647]范围内的所有DFS数. Input 没有输入 Output 一递增的顺序输出所有的DFS数,每个数一行. SampleInput 没有输入 SampleOutput 1 2 .... 1 #include <stdio.h> 2 int jc(

Codeforces Round #292 (Div. 2) C. Drazil and Factorial 515C

C. Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Drazil is playing a math game with Varda. Let's define  for positive integer x as a product of factorials of its dig

Problem 34

Problem 34 https://projecteuler.net/problem=34 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. 145是一个神奇的数字,1! + 4! + 5! = 1 + 24 + 120 = 145. Find the sum of all numbers which are equal to the sum of the factorial of their digits. 找到所有

51nod 1058 N的阶乘的长度 位数公式

1058 N的阶乘的长度基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3.Input输入N(1 <= N <= 10^6)Output输出N的阶乘的长度Input示例6Output示例3思路:位数公式 则有: 循环遍历即可 代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() { 4 ios::s