Design an algorithm that takes two numbers in base b 2 b is
Solution
#include <iostream>
 #include <string>
 #include <cctype>
 #include <list>
 #include <math.h>
 #include <stdlib.h>
 #include <vector>
 #include <algorithm>
using namespace std;
 int returnInt(const char c){
 const string number = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstvwxyz$@\";
  return number.find(c);
 }
 char returnBaseChar(const int i){
 const string number = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstvwxyz$@\";
  return number[i % number.size()];
 }
 bool checkValidity(const string& number,const int& base)
 {
 const string bases = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstvwxyz$@\";
  for(int pos = 0; pos != number.size(); ++pos){
 if( unsigned(returnInt(number[pos])) > base ) return false;
 }
 return true;
 }
 string makeEqualfromFront(const string& number, int zeroCount){
 string str = string(number.size() + zeroCount,\'0\');
 for(int pos = zeroCount; pos != number.size()+ zeroCount; ++pos)
 str[pos] = number[pos-zeroCount];
 return str;
 }
 string makeEqualFromLast(const string& number){
 string str;
 if(number[0] != \'0\') return string(number);
 int pos = 1;
 while(number[pos] == \'0\') ++pos;
 std::copy(number.begin()+pos,number.end(),std::back_insert_iterator<string>(str));
  return str;
 }
 string sumFunction(const string& number1,const string& number2, const int& base){
 if(!checkValidity(number1,base) || !checkValidity(number2,base) || base <= 0 || base > 64)
 return \"NULL\";
   
 string startnumber = makeEqualFromLast(number1);
 string endnumber = makeEqualFromLast(number2);
   
 int size = startnumber.size() - endnumber.size();
   
 if(size > 0)
 endnumber = makeEqualfromFront(endnumber,size);
 else if(size < 0)
 startnumber = makeEqualfromFront(startnumber,abs(size));
 else ;
   
   
 list<char> result = list<char>();
 bool carry = false;
 for(int pos = startnumber.size()-1; pos != -1; --pos)
 {
   
 int digitAdded = returnInt(startnumber[pos]) + returnInt(endnumber[pos]);
 if(carry){ ++digitAdded; carry ^=1; }
 result.push_back(returnBaseChar(digitAdded % base));
 if(digitAdded >= base) carry ^= true;
 }
 if(carry){ result.push_back(\'1\'); }
   
 string strnumber;
 while(!result.empty()){
 strnumber.push_back(result.back());
 result.pop_back();
 }
 return strnumber;
 }
int main()
 {
 std::vector<char> inp1={\'E\',\'F\',\'F\',\'F\'};
 reverse(inp1.begin(),inp1.end());
 std::string input1(inp1.begin(),inp1.end());
 std::vector<char> inp2={\'F\',\'a\',\'@\',\'F\'};
 reverse(inp2.begin(),inp2.end());
 std::string input2(inp2.begin(),inp2.end());
 string res = sumFunction(input1,input2,64);
cout << input1 << \" + \" << input2 << \" = \" << res << endl;
 }


