使用C++查詢僅在第L位到第R位之間設定了位的數字
在這個問題中,我們需要找到一個數字的值,該數字在給定的範圍L,R之間所有位都設定為1。
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
尋找解決方案的方法
在這個問題中,我們將討論兩種方法:暴力法和高效方法。
暴力法
在這種方法中,我們將簡單地遍歷給定的範圍,並將給定範圍內所有2的冪相加,這就是我們的答案。
示例
#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
在這種方法中,我們只是遍歷範圍並簡單地將範圍內數字的2的冪相加。此程式的時間複雜度為**O(N)**,其中N是我們的範圍大小。但是,我們可以透過應用問題中位運算的知識來進一步提高時間複雜度。
高效方法
在這種方法中,我們將簡單地制定一個公式來計算我們的答案。
示例
#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
在這種方法中,我們制定了一個計算答案的公式。
上述程式碼的解釋
正如您所知,我們需要計算給定範圍內設定了位的數字,因此在這種方法中,我們找到一個數字,其所有位都從0設定為1到R。然後我們需要減去一個數字,該數字的所有位都從1設定為1到(L-1),因此我們制定了這個觀察結果。給定程式碼的整體時間複雜度為**O(1)**,這是常數時間複雜度,這意味著我們可以在常數時間內計算任何答案。
結論
本文將建立一個用於“僅在第L位到第R位之間設定了位的數字”的程式。我們還學習了這個問題的C++程式以及我們用來解決這個問題的完整方法(常規方法和高效方法)。我們可以用C、Java、Python和其他語言編寫相同的程式。我們希望您覺得本文有所幫助。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP