इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो दिए गए दो संख्याओं को बिटवाइज़ ऑपरेटर का उपयोग करके गुणा करता है।
बाएं शिफ्ट (<<) ऑपरेटर का उपयोग गुणा के लिए किया जाता है जबकि दाएं शिफ्ट (>>) का उपयोग विभाजन के लिए किया जाता है।
दो संख्याओं x, y का गुणनफल x * y = (x * 2) * (y / 2) के रूप में लिखा जा सकता है यदि y सम है अन्यथा यह x * y = (x * y) * (y / 2) + x के बराबर है।
इसलिए जब भी दूसरी संख्या विषम हो जाती है, तो पहली संख्या को परिणाम में जोड़ें। आइए समस्या को हल करने के चरण देखते हैं।
एल्गोरिदम
- दो संख्याएं आरंभ करें।
- एक लूप लिखें जो दूसरी संख्या के 0 होने तक पुनरावृति करता है।
- यदि दूसरी संख्या विषम है, तो पहली संख्या को परिणाम में जोड़ें।
- पहली संख्या को 1 बिट बाएं शिफ्ट करें।
- दूसरी संख्या को 1 बिट दाएं शिफ्ट करें।
कार्यान्वयन
निम्नलिखित C++ में उपरोक्त एल्गोरिदम का कार्यान्वयन है:
#include <bits/stdc++.h>
using namespace std;
int multiplyTwoNumbers(int a, int b) {
int result = 0;
while (b > 0) {
if (b & 1) {
result += a;
}
a = a << 1;
b = b >> 1;
}
return result;
}
int main() {
cout << multiplyTwoNumbers(75, 4) << endl;
cout << multiplyTwoNumbers(90, 9) << endl;
cout << multiplyTwoNumbers(83, 66) << endl;
return 0;
}
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्नलिखित परिणाम मिलेगा।
300 810 5478