Giả sử ta có số nguyên dương x, ta phải tìm số nguyên dương b nhỏ nhất mà phép nhân của mỗi chữ số với x. Nếu chúng tôi không có câu trả lời như vậy thì hãy trả về 0.
Vì vậy, nếu đầu vào là 48, thì đầu ra sẽ là 68
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
ret:=0, mul:=1
-
nếu a <2, thì:
-
trả lại một
-
-
để khởi tạo i:=9, khi i> =2, cập nhật (giảm i đi 1), thực hiện -
-
trong khi một mod tôi giống 0, do -
-
ret:=i * mul + ret
-
mul:=mul * 10
-
a:=a / i
-
-
-
return (nếu a <2 và ret
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int smallestFactorization(int a) { lli ret = 0; lli mul = 1; if (a < 2) return a; for (lli i = 9; i >= 2; i--) { while (a % i == 0) { ret = i * mul + ret; mul *= 10; a /= i; } } return a < 2 && ret < INT_MAX ? ret : 0; } }; main(){ Solution ob; cout << (ob.smallestFactorization(48)); }
Đầu vào
48
Đầu ra
68