题目大意:给一个非负整数n,寻找最小的自然数q使得q的各位数字的乘积等于n。
对n进行2~9的因数分解,从9到2循环(分解成9比分解成3,3更小),同时要考虑0和1的特殊情况,除非n是0或1,否则q的各个数字不会有0和1出现。

1 #include <cstdio> 2 #include <cstring> 3 4 int main() 5 { 6 #ifdef LOCAL 7 freopen("in", "r", stdin); 8 #endif 9 int cnt[10]; 10 int T; 11 scanf("%d", &T); 12 while (T--) 13 { 14 int n; 15 scanf("%d", &n); 16 if (n < 10) 17 { 18 printf("%d ", n); 19 continue; 20 } 21 memset(cnt, 0, sizeof(cnt)); 22 bool ok; 23 while (n > 9) 24 { 25 ok = false; 26 for (int i = 9; i >= 2; i--) 27 if (n % i == 0) 28 { 29 ok = true; 30 cnt[i]++; 31 n /= i; 32 } 33 if (!ok) break; 34 } 35 if (!ok) 36 { 37 printf("-1 "); 38 continue; 39 } 40 cnt[n]++; 41 for (int i = 2; i <= 9; i++) 42 for (int j = 0; j < cnt[i]; j++) 43 printf("%d", i); 44 printf(" "); 45 } 46 return 0; 47 }