东华oj 107--16进制加法

#include<iostream>
#include<vector>

using namespace std;

vector<int> add(vector<int> v1,vector<int> v2)  //大整数加法
{
     int res=0; //表示进位
     vector<int> v;
     for(int i=0;i<v1.size()||i<v2.size();i++)
     {
         if(i<v1.size()) res+=v1[i]; //如果i已经超过vector范围,则不用加了
         if(i<v2.size()) res+=v2[i];
         v.push_back(res%16);
         res/=16;
     }
   
     return v;
}


int main() {
    
    
    
     int n;
     scanf("%d",&n);
     
     char alph[6]={'a','b','c','d','e','f'};
     vector<int> v1,v2;
     
     while(n--)
     {
         string a,b;
         cin>>a>>b;
         
         v1.clear();
         v2.clear();
         for(int i=a.size()-1;i>=0;i--)
         {
             if(a[i]>='a'&&a[i]<='f')
             {
                 v1.push_back(a[i]-'0'-39);
             }
             else v1.push_back(a[i]-'0');
         }
         
         for(int i=b.size()-1;i>=0;i--)
         {
             if(b[i]>='a'&&b[i]<='f')
             {
                 v2.push_back(b[i]-'0'-39);
             }
             else v2.push_back(b[i]-'0');
         }
         
     
        
         vector<int> A;
         A.clear();
         A=add(v1,v2);
         for(int i=A.size()-1;i>=0;i--)
         {
             if(A[i]>=10){
                 cout<<alph[A[i]-10];
             }
             else cout<<A[i];
         }
         cout<<endl;
     }
     
   
   
   
	return 0;
}


//本题其实就是大整数加法+处理a-f和10-15的对应关系
//需要注意两个加数的长度可能不一致,如果没有注意判断会出现错误
//主要是大整数加法的模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值