假设我们有一个正整数N,我们以任何顺序(包括原始顺序)对数字重新排序,以使前导数字不为零。我们必须检查是否可以通过这种方式来使所得的数字为2的幂。因此,如果该数字类似于46,则答案是正确的。
为了解决这个问题,我们将遵循以下步骤-
定义一个称为count的方法,它将x作为输入
ret:= 0
当x不为0时
ret:= ret + 10 ^ x的最后一位
x:= x / 10
返回ret
从主要方法中执行以下操作-
x:=计数(N)
当我在0到31的范围内
如果count(2 ^ i)= x,则返回true
返回假
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int count(int x){ int ret = 0; while(x){ ret += pow(10, x % 10); x /= 10; } return ret; } bool reorderedPowerOf2(int N) { int x = count(N); for(int i = 0; i < 32; i++){ f(count(1 << i) == x) return true; } return false; } }; main(){ Solution ob; cout << (ob.reorderedPowerOf2(812)); }
812
输出结果
1