給定一個正整數 n,要求找出最小的正整數,其各位數字乘積等於 n。若無解則輸出 -1。
n 無法分解為 2~9 的因子乘積(即分解後剩餘因子 > 9),則無解。n = 1,直接輸出 1。n,將因子存入陣列。 9,輸出 -1。#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
int t;
scanf("%d", &t);
while (t--) {
long long n;
scanf("%lld", &n);
if (n == 1) {
printf("1\n");
continue;
}
int ans[50], k = 0;
for (int i = 9; i >= 2; i--) {
while (n % i == 0) {
ans[k++] = i;
n /= i;
}
}
if (n > 9) {
printf("-1\n");
continue;
}
for (int i = k - 1; i >= 0; i--)
printf("%d", ans[i]);
printf("\n");
}
return 0;
}
n = 100:
100 = 5 × 5 × 4(優先取大因子:100÷5=20, 20÷5=4, 4÷4=1)[5, 5, 4]455(驗證:4×5×5=100,且為最小)n = 1 特殊情況。n > 9 判斷遺漏。此題展示了貪心策略在「構造最小數值」問題中的經典應用:大因子優先減少位數,小數字優先排列降低數值。