समस्या कथन
एक अहस्ताक्षरित संख्या को देखते हुए, दी गई अहस्ताक्षरित संख्या के बिट्स का उपयोग करके बनाई जा सकने वाली अधिकतम संख्या ज्ञात करें
अगर इनपुट नंबर 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