81 16进制加法
作者: xxx时间限制: 1S章节: 字符串
问题描述 :
某天、小晨在路上背着单词,突遇一外星人,外星人对小晨很感兴趣,为了考验小晨的智商,就向小晨提问简单加法,由于外星人使用16进制,所以,小晨必须用16进制回答。
输入说明 :
首先输入一个整数T,
以下T行,每行两个16进制数字
输出说明 :
T行,每行一个16进制数,为求出的两数之和。
其中的英文字母a到f为小写。
输入范例 :
2
4b0d 4887
2745 7438
输出范例 :
9394
9b7d
解答思路:
单纯的进制转换,且测试数据使用int型绰绰有余。
AC代码
#include <cstdio>
#include <cstring>
#include <cmath>
int HtoD(char a[])
{
int number=0;
int i=0;
for(int n=strlen(a)-1;n>=0;n--)
{
if(a[n]>='0'&&a[n]<='9')
{
number+=((a[n]-'0')*pow(16,i));
}
else
{
number+=((a[n]-'a'+10)*pow(16,i));
}
i++;
}
return number;
}
void DtoH(int x)
{
char a[10];
int i=0;
memset(a,0,sizeof(a));
do
{
int tem=x%16;
if(tem>9)
{
a[i++]=tem-10+'a';
}
else
{
a[i++]=tem+'0';
}
x/=16;
}while(x);
a[i]='\0';
for(int k=strlen(a)-1;k>=0;k--)
{
putchar(a[k]);
}
printf("\n");
}
int main(){
int t;
scanf("%d",&t);
while(t--)
{
char a[10],b[10];
scanf("%s %s",a,b);
int numx,numy;
numx=HtoD(a);
numy=HtoD(b);
int sum=numx+numy;
DtoH(sum);
}
}