Maison >développement back-end >C++ >Trouver le nombre avec uniquement les bits définis entre l'index 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
Dans le problème donné, nous discuterons de deux méthodes, la méthode par force brute et la méthode efficace.
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.
#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"; }
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é.
Dans cette méthode, nous allons simplement construire une formule pour calculer notre réponse.
#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"; }
14
Dans cette méthode, nous formulons une formule pour calculer la réponse.
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.
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!