#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> A,B;
vector<int> add(vector<int> &A, vector<int> &B)
{
vector<int> C;
for(int i = 0; i < A.size() || i < B.size(); i ++)
{
int t = 0;
if(i < A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t % 16);
}
return C;
}
char get_char(int x)
{
if(x >= 10)
return x - 10 + 'A';
else
return x + '0';
}
int get_int(char x)
{
if(x >= 'A')
return x - 'A' + 10;
else
return x - '0';
}
int main()
{
string a,b;
while(cin >> a >> b)
{
A.clear();
B.clear();
for(int i = a.size() - 1; i >= 0; i --)
A.push_back(get_int(a[i]));
for(int i = b.size() - 1; i >= 0; i --)
B.push_back(get_int(b[i]));
vector<int> C = add(A,B);
for(int i = C.size() - 1; i >= 0; i --)
cout << get_char(C[i]);
cout << endl;
}
return 0;
}
注意三点吧:
1.十六进制是无进位的,所以在加法模板中每次要重置进位t = 0;
。
2.关于16进制的字符转数字和数字转字符。计算16进制的时候是以字符的形式传入的,首先要把字符转换成10进制下的数字来进行计算;计算完毕后要将数字转换成字符输出。
char get_char(int x)
{
if(x >= 10)
return x - 10 + 'A';
else
return x + '0';
}
int get_int(char x)
{
if(x >= 'A')
return x - 'A' + 10;
else
return x - '0';
}
3.循环的时候size() - 1
以及 A.size() - 1
和a.size() - 1
别误打。