问题描述 :
某天、小晨在路上背着单词,突遇一外星人,外星人对小晨很感兴趣,为了考验小晨的智商,就向小晨提问简单加法,由于外星人使用16进制,所以,小晨必须用16进制回答。
输入说明 :
首先输入一个整数T,
以下T行,每行两个16进制数字
输出说明 :
T行,每行一个16进制数,为求出的两数之和。
其中的英文字母a到f为小写。
输入范例 :
2
4b0d 4887
2745 7438
输出范例 :
9394
9b7d
c++:
#include <bits/stdc++.h>
using namespace std;
int res[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int index(char c){
for(int i=0;i<16;i++){
if(c==res[i]){
return i;
}
}
return 0;
}
char back(int index){
return res[index];
}
int main()
{
int n;
cin>>n;
while(n--){
char a[100];
char b[100];
char num1[100]={'0'};
char num2[100]={'0'};
cin>>a>>b;
int len1=strlen(a);
int len2=strlen(b);
for(int i=0;i<len1;i++){
num1[len1-i-1]=a[i]; //将个位放在前面,方便重个位相加
}
for(int i=0;i<len2;i++){
num2[len2-i-1]=b[i];
}
int len3=0;
int result[100];
char end[100];
int x=0;
while(len3<len1||len3<len2){
result[len3]=index(num1[len3])+index(num2[len3])+x;
x=result[len3]/16; //保存进制
result[len3]%=16; //实际保存的数
end[len3]=back(result[len3]);
len3++;
}
if(x==0){
len3--;
}else{
end[len3]=x+'0';
}
for(int i=len3;i>=0;i--){
printf("%c",end[i]);
}
printf("\n");
}
return 0;
}