首页 > 代码库 > 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为中数字的个数。(1<=n<=15)第二行给出n位数的正整数X(X中至少有一位数大于1)
Output
共一行,表示符合上述条件的最大值。
Input示例
41234
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 }
1435 位数阶乘
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。