C++ 中的最小因子分解


假設我們有一個正整數 x,我們必須找到一個最小的正整數 b,其每一位數字的乘積等於 x。如果我們沒有這樣的答案,則返回 0。

所以,如果輸入為 48,那麼輸出將為 68

為了解決這個問題,我們將按照以下步驟進行 -

  • ret:= 0,mul:= 1

  • 如果 a < 2,那麼

    • 返回 a

  • 對於初始化 i:= 9,當 i >= 2 時,更新(將 i 減 1),執行 -

    • 當 a 除以 i 等於 0 時,執行 -

      • ret:= i * mul + ret

      • mul:= mul * 10

      • a:= a / i

  • 返回(如果 a < 2 且 ret < 無限大,則返回 ret,否則返回 0)

示例

讓我們看看以下實現,以便更好地理解 -

 動態演示

#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

更新日期:2020 年 11 月 16 日

101 次檢視

開啟你的 職業

完成該課程獲得認證

開始
廣告
© . All rights reserved.