Maison  >  Article  >  développement back-end  >  Trouver le nombre avec uniquement les bits définis entre l'index Lth et Rth en utilisant C++

Trouver le nombre avec uniquement les bits définis entre l'index Lth et Rth en utilisant C++

PHPz
PHPzavant
2023-08-26 21:45:19984parcourir

Trouver le nombre avec uniquement les bits définis entre lindex Lth et Rth en utilisant C++

Dans le problème donné, nous devons trouver la valeur d'un nombre qui a tous les bits définis entre la plage donnée L, R. Par exemple −

Input: L = 1, R = 5
Output: 62
Explanation: representation of given L and R in binary form is 0..0111110

Input: L = 1, R = 4
Output: 30
Explanation: representation of given L and R in binary form is 0..11110

Méthodes pour trouver la solution

Dans le problème donné, nous discuterons de deux méthodes, la méthode par force brute et la méthode efficace.

Méthode par force brute

Dans cette méthode, nous parcourons simplement la plage donnée et additionnons toutes les puissances de 2 dans la plage donnée et ce sera notre réponse.

Exemple

#include<bits/stdc++.h>
using namespace std;
int main() {
   int L = 1, R = 3; // the given range
   int ans = 0; // our answer
   for(int i = L; i <= R; i++) // traversing through the whole range
      ans += pow(2, i); // adding values to the answer.
   cout << ans << "\n";
}

Sortie

14

Dans cette méthode, nous parcourons simplement la plage et ajoutons simplement les puissances de 2 des nombres de la plage. La complexité temporelle de ce programme est O(N), où N est la taille de notre plage. Mais nous pouvons encore améliorer la complexité temporelle en appliquant la connaissance des bits au problème donné.

Méthode efficace

Dans cette méthode, nous allons simplement construire une formule pour calculer notre réponse.

Exemple

#include<bits/stdc++.h>
using namespace std;
int main() {
   int L = 1, R = 3; // the given range
   int ans = 0; // our answer
   for(int i = L; i <= R; i++) // traversing through the whole range
      ans += pow(2, i); // adding values to the answer.
   cout << ans << "\n";
}

Sortie

14

Dans cette méthode, nous formulons une formule pour calculer la réponse.

Explication du code ci-dessus

Comme vous le savez, nous devons compter les nombres avec des bits définis dans une plage donnée, donc dans cette méthode, nous trouvons un nombre de 0 à R avec tous les bits définis. Nous devons ensuite soustraire un nombre dont tous les bits sont définis de 1 à (L-1), nous formulons donc cette observation. La complexité temporelle globale du code donné est O(1), c'est-à-dire une complexité temporelle constante, ce qui signifie que nous pouvons calculer n'importe quelle réponse en temps constant.

Conclusion

Cet article écrira un programme pour "uniquement les nombres avec des bits définis entre les index L-ème et R-ème". Nous avons également appris des programmes C++ et des méthodes complètes (communes et efficaces) pour résoudre ce problème. Nous pouvons écrire le même programme dans d'autres langages comme C, Java, Python et autres. J'espère que cet article vous sera utile.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer