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
广告