Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 최소 분해

<시간/>

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