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 次查看

开启你的 职业

完成该课程获得认证

开始
广告