题目大意:将一个数通过因式分解变成另一个由因子组成的最小的数。
解题思路:因为要组成数,所以因子只需要从 2 - 9,又因为需要最小的数,所以因式分解从最大的因子开始,这样位数最少,最后输出从最小的因子输出,保证最小。1的话需要特判,因为所有的数都有因子1.
代码:
#include <stdio.h>
#include <string.h>
const int N = 10;
int c[N];
int n;
bool factor() {
memset (c, 0, sizeof (c));
for (int i = N - 1; i >= 2; i--) {
if (n == 1)
return true;
while (n % i == 0) {
c[i]++;
n /= i;
}
}
if (n == 1)
return true;
return false;
}
int main () {
int t;
int c6;
scanf ("%d", &t);
while (t--) {
scanf ("%d", &n);
if (n != 1) {
if (!factor())
printf ("-1\n");
else {
for (int i = 2; i < 10 ; i++)
for (int j = 0; j < c[i]; j++)
printf ("%d", i);
printf ("\n");
}
} else
printf ("1\n");
}
return 0;
}