Maison > développement back-end > C++ > Représentation binaire du prochain plus grand nombre avec le même nombre de 1 et de 0 dans le programme C ?

Représentation binaire du prochain plus grand nombre avec le même nombre de 1 et de 0 dans le programme C ?

PHPz
Libérer: 2023-08-26 15:21:06
avant
1272 Les gens l'ont consulté

Représentation binaire du prochain plus grand nombre avec le même nombre de 1 et de 0 dans le programme C ?

Supposons que nous ayons un nombre binaire qui représente un nombre n. Nous devons trouver un nombre binaire supérieur à n mais le plus petit, et qui possède également le même nombre de 0 et de 1. Donc, si le nombre est 1011 (11 en décimal), alors la sortie sera 1101 (13 en décimal). Ce problème peut être résolu en utilisant le prochain calcul de permutation. Regardons l'algorithme pour avoir cette idée. La traduction chinoise de

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
Copier après la connexion

Example

est :

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);
}
Copier après la connexion

Output

Binary value of next greater number = 1101
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal