首页 > 代码库 > 1435 位数阶乘

1435 位数阶乘

1435 位数阶乘
基准时间限制:1 秒 空间限制:131072 KB 

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示例
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 位数阶乘