我第一想法是拆分素数, 但是由于考虑不周全WA了两次, 6 = 2*3, 4 = 2*2, 所以当阶乘 N>= 4时应该素因子2应该再减去两个,同理6也是这么考虑
之后看了题解,ORZ自己好蠢, 明明是个找规律,让我做的这么恶心下次看题一定要分析3~5分钟再敲, 完全想明白再敲,否则功亏一篑。 没想明白别下手
#include <iostream>
#include <string.h>#include <stdlib.h>
#include <stdio.h>
using namespace std;
int pri[] = {2, 3, 5, 7};
int num[7];
int main()
{
int n, maxv;
char a;
while(scanf("%d",&n) != EOF)
{
getchar();
memset(num , 0, sizeof(num));
for(int i = 0; i < n; i++)
{
scanf("%c",&a);
for(int res = 2; res <= a - '0'; res++)
{
int val = res;
for(int i = 3; i >= 0 ; i--)
{
while(val%pri[i] == 0)
{
val/=pri[i];
num[i]++;
}
if(val == 1) break;
}
}
}
int res = 0;
for( int i = 3; i >= 0; i--)
{
for( int j = 0; j < num[i]; j++)
printf("%d",pri[i]);
if(pri[i] >= 4)
num[0] -= num[i]*2;
if(pri[i] >= 6)
num[0] -= num[i], num[1] -= num[i];
for( int k = 0; k < 4; k++)
num[k] -= num[i];
}
printf("\n");
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int n;
char q;
int a[10]={0};
cin>>n;
for(int i=0;i<n;++i){
cin>>q;
int m=q-'0';
if(m==4){a[2]=a[2]+2;a[3]++;}
else if(m==6) {++a[5];++a[3];}
else if(m==8){a[2]=a[2]+3;++a[7];}
else if(m==9){a[3]=a[3]+2;++a[7];++a[2];}
else a[m]++;
}
for(int i=9;i>1;--i)
if(a[i]!=0) for(int j=0;j<a[i];++j) cout<<i;
return 0;
}