0
点赞
收藏
分享

微信扫一扫

107 16进制加法

老王420 2022-03-18 阅读 40

问题描述 :

某天、小晨在路上背着单词,突遇一外星人,外星人对小晨很感兴趣,为了考验小晨的智商,就向小晨提问简单加法,由于外星人使用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;
}



举报

相关推荐

0 条评论