/*
给一个数n,求输出一个最小的整数ans,该整数各位上的数的乘积等于n
思路:如果n不等于1或0,可找出n在2到9之间的所有因子(包括相同的)
用这些因子组成一个最小的整数
利用递归可以一步步找到因子,再利用栈(函数本身是用栈来实现的)来保存因子,
直到找到所有的因子后,在从栈依次里面弹出因子后输出,无需开数组保存,看上去比较灵活
*/
给一个数n,求输出一个最小的整数ans,该整数各位上的数的乘积等于n
思路:如果n不等于1或0,可找出n在2到9之间的所有因子(包括相同的)
用这些因子组成一个最小的整数
*/
#include <stdio.h>
int main()
{
int t,ans[128];
scanf("%d",&t);
while(t--)
{
int n,num=0;
scanf("%d",&n);
if(n<2)
printf("%d",n);
else
{
for(int i=9;i>1;i--)/*除非n=1,否则ans的各位数上不会有1
为使该整数最小,所以从9到1枚举它的各位数*/
while(n%i==0)
{
ans[num++]=i;//保留该因子,且长度加1
n/=i;//除去该因子
}
if(n==1)//如果存在满足题意的ans,则除去所有的非1因子后,n==1
for(int i=num-1;i>=0;i--)
printf("%d",ans[i]);
else
printf("-1");
}
printf("\n");
}
return 0;
}
/*
利用递归可以一步步找到因子,再利用栈(函数本身是用栈来实现的)来保存因子,
直到找到所有的因子后,在从栈依次里面弹出因子后输出,无需开数组保存,看上去比较灵活
*/
#include <stdio.h>
int t,n;
void search(int sum)//n的非1因子
{
if(sum>1)//递归边界
{
if(n%sum!=0)
search(--sum);//如果sum不是n的因子,则寻找更小的因子(--sum)
else
{
n/=sum;//除去该因子
search(sum);
if(n==1)/*如果存在满足题意的答案,则除去所有的非1因子后,n==1*/
printf("%d",sum);
}
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n<2)
printf("%d",n);
else
{
search(9);
if(n!=1)
printf("-1");
}
printf("\n");
}
return 0;
}