Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Các lũy thừa của 2 cho tổng yêu cầu trong C++


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