समस्या कथन
एक अहस्ताक्षरित संख्या को देखते हुए, दी गई अहस्ताक्षरित संख्या के बिट्स का उपयोग करके बनाई जा सकने वाली अधिकतम संख्या ज्ञात करें
अगर इनपुट नंबर 8 है तो इसका बाइनरी प्रतिनिधित्व है-
00000000000000000000000000001000
इसे अधिकतम करने के लिए MSB को 1 पर सेट करें। फिर संख्या 2147483648 हो जाती है जिसका बाइनरी प्रतिनिधित्व है-
10000000000000000000000000000000
एल्गोरिदम
1. Count number of set bits in the binary representation of a given number 2. Find a number with n least significant set bits 3. shift the number left by (32 – n)
उदाहरण
#include <bits/stdc++.h>
using namespace std;
unsigned getMaxNumber(unsigned num){
int n = __builtin_popcount(num);
if (n == 32) {
return num;
}
unsigned result = (1 << n) - 1;
return (result << (32 - n));
}
int main(){
unsigned n = 8;
cout << "Maximum number = " << getMaxNumber(n) << endl;
return 0;
} आउटपुट
जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है-
Maximum number = 2147483648