मान लीजिए हमारे पास एक धनात्मक पूर्णांक N है, हम अंकों को किसी भी क्रम में पुनर्व्यवस्थित करते हैं (मूल क्रम सहित) जैसे कि अग्रणी अंक गैर-शून्य हो। हमें जांचना है कि क्या हम ऐसा कर सकते हैं कि परिणामी संख्या 2 की घात हो।
उदाहरण के लिए, यदि संख्या 46 है, तो उत्तर true होगा (64 = 2⁶)।
समाधान दृष्टिकोण
count() विधि: अंकों की आवृत्ति को 10^अंक के योग के रूप में एन्कोड करें
x := count(N) की गणना करें
i को 0 से 31 तक: यदि count(2ⁱ) == x तो true लौटाएं
false लौटाएं
C++ कार्यान्वयन
#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++){
if(count(1 << i) == x) return true;
}
return false;
}
};
int main(){
Solution ob;
cout << (ob.reorderedPowerOf2(812));
return 0;
}
इनपुट
812
आउटपुट
1