ที่นี่เราจะมาดูกันว่าเราสามารถเขียนโปรแกรมที่สามารถเพิ่มเลขฐานสอง n ตัวที่กำหนดเป็นสตริงได้อย่างไร วิธีที่ง่ายกว่าคือการแปลงสตริงไบนารีให้เทียบเท่าทศนิยม จากนั้นเพิ่มและแปลงเป็นไบนารีอีกครั้ง ที่นี่เราจะทำการเพิ่มเติมด้วยตนเอง
เราจะใช้ฟังก์ชันตัวช่วยหนึ่งตัวเพื่อเพิ่มสตริงไบนารีสองตัว ฟังก์ชันนั้นจะถูกใช้สำหรับ n-1 ครั้งสำหรับ n สตริงไบนารีที่ต่างกัน ฟังก์ชันจะทำงานเหมือนด้านล่าง
อัลกอริทึม
addTwoBinary(bin1, bin2)
begin s := 0 result is an empty string now i := length of bin1, and j := length of bin2 while i >= 0 OR j>=0 OR s is 1, do if i >=0 then, s := s + bin1[i] as number else s := s + 0 end if if j >=0 then, s := s + bin2[j] as number else s := s + 0 end if result := (s mod 2) concatenate this with result itself s := s/2 i := i - 1 j := j - 1 done return result end
ตัวอย่าง
#include<iostream>
using namespace std;
string addTwoBinary(string bin1, string bin2) {
string result = "";
int s = 0; //s will be used to hold bit sum
int i = bin1.length() - 1, j = bin2.length() - 1; //traverse from LSb
while (i >= 0 || j >= 0 || s == 1) {
if(i >= 0)
s += bin1[i] - '0';
else
s += 0;
if(j >= 0)
s += bin2[j] - '0';
else
s += 0;
result = char(s % 2 + '0') + result;
s /= 2; //get the carry
i--; j--;
}
return result;
}
string add_n_binary(string arr[], int n) {
string result = "";
for (int i = 0; i < n; i++)
result = addTwoBinary(result, arr[i]);
return result;
}
main() {
string arr[] = { "1011", "10", "1001" };
int n = sizeof(arr) / sizeof(arr[0]);
cout << add_n_binary(arr, n) << endl;
} ผลลัพธ์
10110