Computer >> Máy Tính >  >> Lập trình >> C ++

Quyền của 2 thành tổng bắt buộc trong C ++


Trong bài toán này, chúng ta được cung cấp một số nguyên N. Nhiệm vụ của chúng ta là in ra một số mà khi nâng lên thành lũy thừa của 2 sẽ cho ra số đó.

Hãy lấy một ví dụ để hiểu vấn đề

Đầu vào - 17

Đầu ra - 0, 4

Giải thích - 17 =2 4 + 2 0 =16 + 1

Để giải quyết vấn đề này, chúng ta sẽ chia số với 2 một cách đệ quy. Theo phương pháp này, mọi số có thể được biểu diễn dưới dạng lũy ​​thừa của 2. Phương pháp này được sử dụng để chuyển đổi số thành số tương đương nhị phân của nó.

Ví dụ

Chương trình thể hiện việc triển khai giải pháp của chúng tôi

#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<<"Powers of 2 that sum upto "<<number<<"are : ";
   sumPower(number);
   return 0;
}

Đầu ra

Powers of 2 that sum upto 23342are : 1, 2, 3, 5, 8, 9, 11, 12, 14