二十六进制加法
#include<iostream>
#include<string>
#include<vector>
#include<stdio.h>
using namespace std;
vector<char> add(string str1, string str2)
{
vector<char> v;
if (str1.length() == 0 || str2.length() == 0)
{
return v;
}
int carry, remainder, carry1 = 0,i,j,k,l;
char* ch;
for (i = str1.length()-1, j = str2.length()-1; i >=0 && j >=0 ; i--, j--)
{
carry = 0;//进位
int sum = (str1[i] - 97) + (str2[j] - 97);//从数组最后的元素先加 相当于个位数先加 依次往前
//-97的原因是因为将每个字符都变成十进制相加
if (sum >= 26)//如果大于26 说明有进位
{
remainder = sum % 26+carry1;//sum与二十六的余数表示进位之后剩下的数 参见十进制加法
remainder += 97;//加97是为了回到字符 二十六进制
carry = 1;
v.push_back(remainder);//v用来存放每位数相加之后的结果
}
else//若没有进制直接将数放入v中
{
sum += 97;
v.push_back(sum);
}
carry1 = carry;//carry1表示记录前一位数的进位情况 carry表示本次的进位情况
k = j;
l = i;
}
while (l != 0)
{
if (carry == 1)
{
//cout << str1[l-1] ;
v.push_back(str1[l-1] + carry);//如果两个加数的位数不一样 将位数多的 没有数与其相加的放入v中
carry = 0;
}
else
v.push_back(str1[l - 1]);
l--;
}
while (k != 0)
{
if (carry == 1)
{
v.push_back(str2[k-1] + carry);
carry = 0;
}
k--;
}
return v;
}
int main16()
{
string str1="abc", str2="ab";
vector<char> myv;
myv=add(str1, str2);
for (int i = myv.size()-1; i >=0; i--)//倒序输出
{
cout << myv[i] << " ";
}
system("pause");
return 0;
}