Trong bài toán này, ta được cho một số nguyên N. Nhiệm vụ là in ra các số mũ mà khi 2 lũy thừa các số đó thì tổng bằng N.
Hãy xem ví dụ:
Đầu vào – 17
Đầu ra – 0, 4
Giải thích – 17 = 24 + 20 = 16 + 1
Để giải bài toán, ta chia liên tiếp số cho 2. Bằng phương pháp này, mọi số đều có thể biểu diễn dưới dạng tổng các lũy thừa của 2. Phương pháp này chính là chuyển đổi số sang nhị phân.
Ví dụ minh họa
Chương trình triển khai giải pháp:
#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<<"Các lũy thừa của 2 có tổng bằng "<<number<<" là: "; sumPower(number); return 0; }Kết quả
Các lũy thừa của 2 có tổng bằng 23342 là: 1, 2, 3, 5, 8, 9, 11, 12, 14