โจทย์
ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่คูณตัวเลขสองตัวที่กำหนดโดยใช้ตัวดำเนินการบิตวایز
ตัวดำเนินการ เลขซ้าย (<<) ใช้สำหรับการคูณ ในขณะที่ เลขขวา (>>) ใช้สำหรับการหาร
การคูณของตัวเลขสองตัว 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