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,
思路:
非质数阶乘可以分解为质数阶乘之积:9!=7!*3!*3!*2!等。
#include <stdio.h>
int main()
{
int i = 0, j = 0, n = 0, sum[8] = { 0 }; //sum[2]:2 sum[3]:3 sum[5]:5 sum[7]:7
char ch[20] = { 0 };
scanf("%d", &n);
getchar();
for (i = 0;i < n;i++)
{
ch[i] = getchar();
switch (ch[i])
{
case '2': {sum[2]++;break;}
case '3': {sum[3]++;break;}
case '4': {sum[3]++;sum[2] += 2;break;}
case '5': {sum[5]++;break;}
case '6': {sum[3]++;sum[5]++;break;}
case '7': {sum[7]++;break;}
case '8': {sum[7]++;sum[2] += 3;break;}
case '9': {sum[7]++;sum[3] += 2;sum[2]++;break;}
}
}
for (i = 7;i > 1;i--)
{
if (sum[i] != 0)
{
for (j = 0;j < sum[i];j++)
printf("%d", i);
}
}
printf("\n");
}