16进制加法
时间限制: 1S类别: 字符串->较难
问题描述 :
某天、小晨在路上背着单词,突遇一外星人,外星人对小晨很感兴趣,为了考验小晨的智商,就向小晨提问简单加法,由于外星人使用16进制,所以,小晨必须用16进制回答。
输入说明 :
首先输入一个整数T,
以下T行,每行两个16进制数字
输出说明 :
T行,每行一个16进制数,为求出的两数之和。
其中的英文字母a到f为小写。
方法一:
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
int trans(const string& s)
{
int num = 0;
for (size_t i = 0; i < s.length(); ++i)
{
if (s[i] >= '0' && s[i] <= '9')
{
num += (s[i] - '0') * pow(16, s.length() - 1 - i);
}
else if (s[i] >= 'a' && s[i] <= 'f')
{
num += (s[i] - 'a' + 10) * pow(16, s.length() - 1 - i);
}
}
return num;
}
void re(int sum)
{
if (sum == 0)
{
cout << "0";
return;
}
string result;
while (sum != 0)
{
int remainder = sum % 16;
if (remainder < 10)
{
result.insert(result.begin(), '0' + remainder);
}
else
{
result.insert(result.begin(), 'a' + (remainder - 10));
}
sum /= 16;
}
cout << result;
}
int main()
{
int n;
cin >> n;
while (n--)
{
string s1, s2;
cin >> s1 >> s2;
int sum = trans(s1) + trans(s2);
re(sum);
cout << endl;
}
return 0;
}
方法二:
#include <iostream>
#include <iomanip>
#include <sstream>
using namespace std;
int main()
{
int T;
cin >> T; // 读取测试用例的数量
while (T--)
{
int num1, num2;
string input1, input2;
cin >> hex >> input1; // 读取第一个16进制数
cin >> hex >> input2; // 读取第二个16进制数
// 将16进制字符串转换为整数
stringstream ss;
ss <<hex << input1;
ss >> num1;
ss.clear();
ss <<hex << input2;
ss >> num2;
// 输出结果
cout <<hex <<nouppercase << (num1 + num2) <<endl;
}
return 0;
}