양의 정수 x가 있다고 가정하고 각 숫자의 곱이 x와 같은 가장 작은 양의 정수 b를 찾아야 합니다. 그러한 응답이 없으면 0을 반환합니다.
따라서 입력이 48과 같으면 출력은 68이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret :=0, mul :=1
-
<2인 경우:
-
반환
-
-
initialize i :=9의 경우 i>=2일 때 업데이트(i를 1만큼 감소), −
-
mod i가 0과 같을 때 −
-
ret :=i * mul + ret
-
mul :=mul * 10
-
a :=a / i
-
-
-
반환(a <2이고 ret
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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));
} 입력
48
출력
68