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

C++에서 가능한 최소 의사 이진 숫자의 합으로 숫자 표시

<시간/>

이 자습서에서는 최소 의사 이진 숫자의 합으로 숫자 표현에 대해 설명합니다. 의사 이진수는 0과 1과 같이 이진수로만 구성된 숫자입니다. 의사 이진수의 예로는 00, 11, 10, 100, 111, 1011 등이 있습니다.

다음은 의사 이진수의 합으로 표시되는 숫자의 몇 가지 예입니다.

Input : 23
Output : 11 + 11 + 1
Explanation : 23 = 11 + 11 + 1, sum of pseudo-binary numbers(11, 11, 1) is 23.

Input : 50
Output : 10 + 10 + 10 + 10 + 10

해결책을 찾기 위한 접근 방식

다음은 N을 나타내는 최소 의사 이진수를 찾는 가장 좋은 방법 중 하나입니다.

  • 숫자 X를 가져와 숫자 N의 숫자에 따라 1 또는 0으로 숫자를 업데이트합니다.

  • N의 각 자리에 있는 숫자를 확인하십시오.

    • 0이면 X의 해당 위치를 0으로 업데이트합니다.

    • 0이 아니면 X의 해당 자리를 1로 업데이트합니다.

    • N =32라고 하면 X는 11이 됩니다.

  • 그러면 X는 하나의 의사 이진 숫자가 됩니다.

  • 이제 N을 X만큼 감소시키고 N이 0이 될 때까지 1단계를 반복합니다.

예시

위 접근 방식에 대한 C++ 코드

#include<iostream>
using namespace std;
int main(){
   int N = 51;
   // find a pseudo-binary number until N becomes 0.
   cout << "pseudo-binary representation of " << N << " is: ";
   while (N > 0){                
      // finding X which contains 0's and 1's according to N.
      int temp = N;
      int X = 0, bit = 1;
      // checking each place of N for zero or non-zero.
      while (temp!=0){
      int last_dig = temp % 10;
      temp = temp / 10;
      if (last_dig != 0)
         X += bit;
         bit *= 10;
      }
      // printing one pseudo-binary number.
      cout << X << " ";
      // Updating N by subtracting with X.
      N = N - X;
       
   }
   return 0;
}

출력

pseudo-binary representation of 51 is: 11 10 10 10 10

강령 이해

  • N을 취하고 X를 찾기 위해 모든 장소에서 숫자를 선택하기 위한 외부 while 루프.

  • temp 변수의 값을 N으로 업데이트하고 temp 변수의 각 위치를 확인하고 변수 X의 해당 위치를 업데이트하는 내부 루프를 사용합니다.

  • 하나의 의사 이진수이기 때문에 X의 값을 인쇄합니다.

  • X로 빼서 N을 업데이트하고 N이 0이 될 때까지 외부 루프로 다시 이동합니다.

결론

이 튜토리얼에서 우리는 가능한 최소 의사 이진 숫자의 합으로 숫자를 표현하는 방법에 대해 논의했습니다. 우리는 모든 의사 이진수를 찾는 접근 방식에 대해 논의했습니다. 우리는 또한 C, Java, Python 등과 같은 다른 프로그래밍 언어로 작성할 수 있는 동일한 C++ 코드에 대해 논의했습니다. 이 튜토리얼이 도움이 되기를 바랍니다.