इस समस्या में, हमें एक पूर्णांक N दिया गया है। हमारा कार्य उन संख्याओं को प्रिंट करना है जिन्हें 2 की घात पर उठाने पर वह संख्या प्राप्त होती है।
आइए एक उदाहरण से समझते हैं:
इनपुट - 17
आउटपुट - 0, 4
व्याख्या - 17 = 24 + 20 = 16 + 1
इस समस्या को हल करने के लिए, हम संख्या को 2 से पुनरावर्ती रूप से विभाजित करेंगे। इस विधि से, प्रत्येक संख्या को 2 की घातों के रूप में दर्शाया जा सकता है। यह विधि संख्या को उसके बाइनरी समकक्ष में बदलने के लिए उपयोग की जाती है।
उदाहरण
हमारे समाधान के कार्यान्वयन को दर्शाने वाला प्रोग्राम
#include <bits/stdc++.h> using namespace std; void sumPower(long int x) { vector<long int> powers; while (x > 0){ powers.push_back(x % 2); x = x / 2; } for (int i = 0; i < powers.size(); i++){ if (powers[i] == 1){ cout << i; if (i != powers.size() - 1) cout<<", "; } } cout<<endl; } int main() { int number = 23342; cout<<"2 की घातें जिनका योग "<<number<<" तक है: "; sumPower(number); return 0; }आउटपुट
2 की घातें जिनका योग 23342 तक है: 1, 2, 3, 5, 8, 9, 11, 12, 14