I want to improve this code with better logic and using STL.
#include <iostream>
#include <vector>
void addition(const std::vector<int>& A,
const std::vector<int>& B,
std::vector<int>& C)
{
int size_A = A.size();
int size_B = B.size();
int max_size;
if (size_A >= size_B)
{
max_size = size_A;
}
else
{
max_size = size_B;
}
int carry = 0, sum = 0;
int i = size_A - 1, j = size_B - 1, k = max_size;
C.resize(k + 1);
while ( i >= 0 && j >= 0 && k >= 0)
{
sum = A[i] + B[j] + carry;
if (sum == 0)
{
carry = 0;
C[k] = 0;
}
else if (sum == 1)
{
carry = 0;
C[k] = 1;
}
else if (sum == 2)
{
carry = 1;
C[k] = 0;
}
else if (sum == 3)
{
carry = 1;
C[k] = 1;
}
i--;
j--;
k--;
}
//if size of first binary number is greter than first
if (max_size == size_A)
{
while (i >= 0 && k >= 0)
{
sum = A[i] + carry;
if (sum == 0)
{
carry = 0;
C[k] = 0;
}
else if (sum == 1)
{
carry = 0;
C[k] = 1;
}
else if (sum == 2)
{
carry = 1;
C[k] = 0;
}
else if (sum == 3)
{
carry = 1;
C[k] = 1;
}
i--;
k--;
}
}
//If size of second binary number is greater than first
else if (max_size == size_B)
{
while (j >= 0 && k >= 0)
{
sum = B[j] + carry;
if (sum == 0)
{
carry = 0;
C[k] = 0;
}
else if (sum == 1)
{
carry = 0;
C[k] = 1;
}
else if (sum == 2)
{
carry = 1;
C[k] = 0;
}
else if (sum == 3)
{
carry = 1;
C[k] = 1;
}
j--;
k--;
}
}
C[0] = carry;
}
int main()
{
int n1, n2, val;
std::cout << "Enter the number of bits for first binary numbers \n";
std::cin >> n1;
std::cout << "Enter the number of bits for second binary numbers \n";
std::cin >> n2;
std::vector<int> A;
std::vector<int> B;
std::vector<int> C;
std::cout << "Enter bits for first binary number \n";
for (int i = 0; i < n1; i++)
{
std::cin >> val;
A.push_back(val);
}
std::cout << "Enter bits for second binary number \n";
for (int i = 0; i < n2; i++)
{
std::cin >> val;
B.push_back(val);
}
std::cout << "First number : ";
for (int i = 0; i < A.size(); i++)
{
std::cout << A[i];
}
std::cout << "\nSecond number : ";
for (int i = 0; i < B.size(); i++)
{
std::cout << B[i];
}
addition(A, B, C);
std::cout << "\nResult : ";
for (int i = 0; i < C.size(); i++)
{
std::cout << C[i];
}
std::cout << "\n";
}