Tìm một số nguyên dương k nhỏ nhất sao cho tích các chữ số của k bằng n

42
Lập trình C++

Bài toán. Tìm một số nguyên dương k nhỏ nhất sao cho tích các chữ số của k bằng n (k, n là 2 số nguyên dương). Ví dụ: 

TIMSO.INP

TIMSO.OUT

72

89

Code tham khảo:

#include <iostream>
using namespace std;
int main() {
    freopen("TIMSO.INP","r",stdin);
    freopen("TIMSO.OUT","w",stdout);
    int n, a = 0;
    cin >> n;
    for(int i = 9; i > 1; i--) {
        while(n % i == 0 && n > 1) {
            a = a*10 + i;
            n = n/i;
        }
    }
    int b = 0;
    while(a > 0)
    {
        int tmp = a % 10;
        b = b * 10 + tmp;
        a = a / 10;
    }
    if(n > 1)
        cout << -1;
    else
        cout << b;
    return 0;
}