समस्या कथन
एक संख्या दी गई है, इसे इसके एक्सट्रीम पोजीशन पर बिट्स स्वैप करके अधिकतम करें यानी पहली और अंतिम स्थिति, दूसरी और अंतिम से दूसरी स्थिति पर।
यदि इनपुट संख्या 8 है तो इसका बाइनरी प्रतिनिधित्व है:
00000000 00000000 00000000 00001000
एक्सट्रीम पोजीशन पर बिट्स स्वैप करने के बाद संख्या बन जाती है:
00010000 00000000 00000000 00000000 और इसका दशमलव समतुल्य है: 268435456
एल्गोरिदम
1. मूल संख्या की एक कॉपी बनाएं। 2. यदि कम महत्वपूर्ण बिट 1 है और अधिक महत्वपूर्ण बिट 0 है तो केवल बिट में बिट्स स्वैप करें, प्रक्रिया जारी रखें जब तक कम महत्वपूर्ण बिट की स्थिति अधिक महत्वपूर्ण बिट की स्थिति से कम है। 3. नई संख्या वापस करें।
उदाहरण
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull getMaxNumber(ull num) {
ull origNum = num;
int bitCnt = sizeof(ull) * 8 - 1;
int cnt = 0;
for (cnt = 0; cnt < bitCnt; ++cnt, --bitCnt) {
int m = (origNum >> cnt) & 1;
int n = (origNum >> bitCnt) & 1;
if (m > n) {
int x = (1 << cnt | 1 << bitCnt);
num = num ^ x;
}
}
return num;
}
int main() {
ull num = 8;
cout << "Maximum number = " << getMaxNumber(num) << endl;
return 0;
}
आउटपुट
Maximum number = 268435456