题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=934
题目:附件
题意:
给出一个数N,求一个最小的数,该数满足的条件是各个位上的数字之积等于N。如果没有输出-1.
题解:
贪心。要求最小所以要尽量少的数字。从9-2枚举,如果N能够被其整除,就将这个数加到结果中,将N除以这个数。直到N成为个位数。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
vector<int> dig;
int m;
scanf("%d",&m);
bool ans=true;
while(m>9)
{
bool flag=false;
for(int i=9;i>=2;i--)
{
if(m%i==0)
{
m/=i;
flag=true;
dig.push_back(i);
break;
}
}
if(!flag)
{
ans=false;
break;
}
}
dig.push_back(m);
if(ans)
{
sort(dig.begin(),dig.end());
int l=dig.size();
for(int i=0;i<l;i++)
{
printf("%d",dig[i]);
}
printf("\n");
}
else
printf("-1\n");
}
return 0;
}