Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 필요한 합계에 대한 2의 거듭제곱


이 문제에서 정수 N이 주어졌습니다. 우리의 임무는 2의 거듭제곱으로 증가했을 때 숫자가 되는 숫자를 출력하는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 − 17

출력 - 0, 4

설명 − 17 =2 4 + 2 0 =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<<"Powers of 2 that sum upto "<<number<<"are : ";
   sumPower(number);
   return 0;
}

출력

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