এই টিউটোরিয়ালে, আমরা একটি প্রোগ্রাম লিখতে যাচ্ছি যা বিটওয়াইজ অপারেটর ব্যবহার করে প্রদত্ত দুটি সংখ্যাকে গুণ করে।
বাম স্থানান্তর (<<) অপারেটর গুণের জন্য ব্যবহৃত হয় যেখানে ডান স্থানান্তর (>>) বিভাজনের জন্য ব্যবহৃত হয়।
দুটি সংখ্যার গুণন 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