양의 정수 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