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为中数字的个数。(1<=n<=15)
第二行给出n位数的正整数X(X中至少有一位数大于1)

Output

共一行,表示符合上述条件的最大值。

Input示例

4
1234

Output示例

33222

思路:找下合数的规律;

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<stdlib.h>
 6 #include<queue>
 7 #include<iostream>
 8 using namespace std;
 9 char str[25];
10 bool prime[25];
11 int ans[25];
12 int t[25];
13 int ak[10000];
14 int main(void)
15 {
16     int n;
17     int i,j;prime[0] = true;
18     for(i = 2; i < 20; i++)
19     {
20         if(!prime[i])
21         {
22             for(j = i; (i*j) < 20; j++)
23             {
24                 prime[i*j] = true;
25             }
26         }
27     }prime[1]=true;
28     scanf("%d",&n);
29     scanf("%s",str);
30     for(i = 0; i < n; i++)
31     {
32         t[i] = str[i]-‘0‘;
33     }
34     int uu = 0;//printf("%d\n",ak[0]);
35     for(i = 0; i < n; i++)
36     {
37         if(!prime[t[i]])
38         {
39             ak[uu++] = t[i];
40         }
41         else if(t[i] == 4)
42         {
43             ak[uu++] = 2;
44             ak[uu++] = 2;
45             ak[uu++] = 3;
46         }
47         else if(t[i] == 6)
48         {
49             ak[uu++] = 3;
50             ak[uu++] = 5;
51         }
52         else if(t[i] == 8)
53         {
54             ak[uu++] = 2;
55             ak[uu++] = 2;
56             ak[uu++] = 2;
57             ak[uu++] = 7;
58         }
59         else if(t[i] == 9)
60         {
61             ak[uu++] = 3;
62             ak[uu++] = 3;
63             ak[uu++] = 2;
64             ak[uu++] = 7;
65         }
66     }//printf("%d\n",ak[0]);
67     sort(ak,ak+uu);
68     for(i = uu-1; i >= 0; i--)
69     {
70         printf("%d",ak[i]);
71     }
72     printf("\n");
73     return 0;
74 }
时间: 2024-11-16 01:13:38

1435 位数阶乘的相关文章

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)

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. 找到所有

UVA 10061 How many zero&#39;s and how many digits ? (m进制,阶乘位数,阶乘后缀0)

题意:给出两个数字a和b,求a的阶乘转换成b进制后,输出(1)后缀中有多少个连续的0? (2)有多少位? 思路:逐个问题解决. 设a!=k.  k暂时不用直接转成b进制. (1)阶乘后缀0问题.先看这个十进制后缀0的例子:http://www.cnblogs.com/xcw0754/p/4604473.html 解法差不多,稍变化. 首先将b分解成若干质数(比如8={2*2*2})保存在一个集合A中(注意自然数的质数分解是唯一的),只要有一个序列A就能构成一个0,因为满b就进位,b可以表示成10