Product of digits
Product of digits |
For a given non-negative integer number N , find the minimal natural Q such that the product of all digits ofQ is equal N .
Input
The first line of input contains one positive integer number, which is the number of data sets. Each subsequent line contains one data set which consists of one non-negative integer number N (0N
109) .
Output
For each data set, write one line containing the corresponding natural number Q or `-1' if Q does not exist.
Sample Input
3 1 10 123456789
Sample Output
1 25 -1
试除。hash打个表保证最小。从9到2开始试除(为什么没1显然,,,,)N<10特判
#include <map>
#include <set>
#include <list>
#include <cmath>
#include<cctype>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b)
{
return a % b == 0 ? b : gcd(b, a % b);
}
int ans[10];
void slove(int N)
{
bool found=true;
memset(ans,0,sizeof(ans));
while (N>1 && found)
{
found=false;
for (int i=9;i>=2;i--)
{
if (N%i==0)
{
//printf("%d %d\n",N,i);
N/=i;
ans[i]++;
found=true;
}
}
}
if (N>1)printf("-1\n");
else
{
for (int i=2;i<=9;i++)
for (int j=1;j<=ans[i];j++)
printf("%d",i);
putchar('\n');
}
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int N;
scanf("%d",&N);
if (N<10)
{
printf("%d\n",N);
continue;
}
slove(N);
}
return 0;
}