Drazil is playing a math game with Varda.
Let's define for positive integer x as a product of factorials of its digits. For example,
.
First, they choose a decimal number a consisting of n digits that contains at least one digit larger than 1. This number may possibly start with leading zeroes. Then they should find maximum positive number x satisfying following two conditions:
1. x doesn't contain neither digit 0 nor digit 1.
2. =
.
Help friends find such number.
The first line contains an integer n (1 ≤ n ≤ 15) — the number of digits in a.
The second line contains n digits of a. There is at least one digit in a that is larger than 1. Number a may possibly contain leading zeroes.
Output a maximum possible integer satisfying the conditions above. There should be no zeroes and ones in this number decimal representation.
4 1234
33222
3 555
555
In the first case,
题目问你求最大的a
这样考虑 4!=3!*2!*2!
6!=5!*3!
8!=7!*2!*2!*2!
9!=7!*3!*3!*2!
于是得到了f(4)=f(322) f(6)=f(53) f(8)=f(7222) f(9)=f(7332)
AC代码
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<set>
#include<map>
#include<vector>
#include<cstring>
#include<stack>
#include<cmath>
#include<queue>
#define INF 0x0f0f0f0f
using namespace std;
int main()
{
int i,j,k,l,m,n,temp;
int a[10];
memset(a,0,sizeof(a));
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%1d",&temp);
switch(temp)
{
case 2:
a[2]++;
break;
case 3:
a[3]++;
break;
case 4:
a[3]++;
a[2]+=2;
break;
case 5:
a[5]++;
break;
case 6:
a[3]++;
a[5]++;
break;
case 7:
a[7]++;
break;
case 8:
a[2]+=3;
a[7]++;
break;
case 9:
a[2]++;
a[3]+=2;
a[7]++;
break;
}
}
for(i=9;i>=2;i--)
{
for(j=0;j<a[i];j++)
{
printf("%d",i);
}
}
printf("\n");
}