এই সমস্যায় একটি পূর্ণসংখ্যা N দেওয়া আছে। N কে ২-এর ঘাতগুলোর যোগফল হিসেবে প্রকাশ করতে হবে এবং সেই ঘাতগুলো প্রিন্ট করতে হবে।
উদাহরণ
ইনপুট: 17
আউটপুট: 0, 4
ব্যাখ্যা: 17 = 2⁴ + 2⁰ = 16 + 1
পদ্ধতি
সংখ্যাকে ২ দিয়ে বারবার ভাগ করে বাইনারি রূপান্তর করা হয়। যেখানে রিমেইন্ডার ১ পাওয়া যায়, সেটিই ঘাতের সূচক।
C++ প্রোগ্রাম
#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 << "২-এর ঘাতগুলো যাদের যোগফল " << number << ": ";
sumPower(number);
return 0;
}
আউটপুট
২-এর ঘাতগুলো যাদের যোগফল 23342: 1, 2, 3, 5, 8, 9, 11, 12, 14