> 백엔드 개발 > C++ > C 프로그램에서 동일한 수의 1과 0을 사용하여 다음으로 큰 숫자를 이진 표현합니까?

C 프로그램에서 동일한 수의 1과 0을 사용하여 다음으로 큰 숫자를 이진 표현합니까?

PHPz
풀어 주다: 2023-08-26 15:21:06
앞으로
1259명이 탐색했습니다.

C 프로그램에서 동일한 수의 1과 0을 사용하여 다음으로 큰 숫자를 이진 표현합니까?

숫자 n을 나타내는 이진수가 있다고 가정해보세요. n보다 크지만 가장 작고, 0과 1의 개수가 같은 이진수를 찾아야 합니다. 따라서 숫자가 1011(10진수 11)이면 출력은 1101(10진수 13)이 됩니다. 이 문제는 다음 순열 계산을 사용하여 해결할 수 있습니다. 이 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다.

algorithm

nextBin(bin) −

Begin
   len := length of the bin
   for i in range len-2, down to 1, do
      if bin[i] is 0 and bin[i+1] = 1, then
         exchange the bin[i] and bin[i+1]
         break
      end if
   done
   if i = 0, then there is no change, return
   otherwise j:= i + 2, k := len – 1
   while j < k, do
      if bin[j] is 1 and bin[k] is 0, then
         exchange bin[j] and bin[k]
         increase j and k by 1
      else if bin[i] is 0, then
         break
      else
         increase j by 1
      end if
   done
   return bin
End
로그인 후 복사

Example

의 중국어 번역은 다음과 같습니다:

Example

#include <iostream>
using namespace std;
string nextBinary(string bin) {
   int len = bin.size();
   int i;
   for (int i=len-2; i>=1; i--) {
      if (bin[i] == &#39;0&#39; && bin[i+1] == &#39;1&#39;) {
         char ch = bin[i];
         bin[i] = bin[i+1];
         bin[i+1] = ch;
         break;
      }
   }
   if (i == 0)
   "No greater number is present";
   int j = i+2, k = len-1;
   while (j < k) {
      if (bin[j] == &#39;1&#39; && bin[k] == &#39;0&#39;) {
         char ch = bin[j];
         bin[j] = bin[k];
         bin[k] = ch;
         j++;
         k--;
      }
      else if (bin[i] == &#39;0&#39;)
         break;
      else
         j++;
   }
   return bin;
}
int main() {
   string bin = "1011";
   cout << "Binary value of next greater number = " << nextBinary(bin);
}
로그인 후 복사

Output

Binary value of next greater number = 1101
로그인 후 복사

위 내용은 C 프로그램에서 동일한 수의 1과 0을 사용하여 다음으로 큰 숫자를 이진 표현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿