题目描述
有些人心如花木,皆向阳而生
|《剑来》
zz很喜欢数学,但是他又是一个数学渣,我们称这种生物叫做学渣,
zz又碰到了一个数学小问题,定义一个函数P (x)
例如:P (123) = 1! ∗ 2! ∗ 3! 现在需要找到的就是最大的大于等于x大的数z的函数值和x相等,
即P (z) = P (x) 当然z这个数不能包含1或者0
还请输出最大的符合要求数z(不一定比x大)
输入
第1行输入T (1 ≤ T ≤ 20)组数据
第2行输入n(1 ≤ n ≤ 100),表示x的数字个数
第3行输入正整数 x
输出
输出最大的z(数据保证x内含大于1的数,所以z必定有解)
样例输入
2 4 1234 3 555
样例输出
33222 555
提示
第一个样例f(1234) = 1! ∗ 2! ∗ 3! ∗ 4! = 288 = f(33222)
//1!=1
//2!=1*2=2
//3!=1*2*3=6
//4!=1*2*3*4=1*2*3*2*2=2!*2!*3!
//5!=1*2*3*4*5=5!
//6!=1*2*3*4*5*6=5!*6=5!*3!
//7!=1*2*3*4*5*6*7=7!
//8!=1*2*3*4*5*6*7*8=7!*8=7!*2!*2!*2!
//9!=1*2*3*4*5*6*7*8*9=7!*3!*3!*2!
#include <bits/stdc++.h>
#include <string.h>
#include <stdio.h>
using namespace std;
char c[110];
int a[10];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
for(int i=0;i<10;i++)
a[i]=0;
scanf("%d",&n);
scanf("%s",c);
int sum=0;
for(int i=0;i<n;i++){
if(c[i]=='1' || c[i]=='0'){
continue;
}
else if(c[i]=='2'){
a[2]++;
sum++;
}
else if(c[i]=='3'){
a[3]++;
sum++;
}
else if(c[i]=='4'){
a[2]+=2;
a[3]+=1;
sum+=3;
}
else if(c[i]=='5'){
a[5]++;
sum++;
}
else if(c[i]=='6'){
a[3]++;
a[5]++;
sum+=2;
}
else if(c[i]=='7'){
a[7]++;
sum++;
}
else if(c[i]=='8'){
a[2]+=3;
a[7]+=1;
sum+=4;
}
else if(c[i]=='9'){
a[7]++;
a[3]+=2;
a[2]++;
sum+=4;
}
}
if(sum<n){
printf("%s\n",c);
}
else{
for(int i=7;i>=2;i--){
for(int j=a[i];j>0;j--){
printf("%d",i);
}
}
printf("\n");
}
}
}