厦大机试(1)-16进制不进位加法
作者:
因为yxc爱上编程
,
2024-04-17 20:53:13
,
所有人可见
,
阅读 31
1、定义函数时非void记得return,不然会超时
2、没有结果输出的时候,看下自己是否忘记输入了
3、while(cin>>a>>b)多组数据输入的时候,如果不是定义在循环里面,就需要将用到的数组重新清0,如果重新定义的话会重新初始化
//二进制下的不进位加法就是异或运算
//依据模版高精度加法,字符0的ASCII码为48,字符A的ASCII码为65,字符a的ASCII码为97
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>A;
vector<int>B;
//绝妙之处就是将十六进制的数转换为十进制这里的辅助函数
int get_int(char c){
if(c<='9') return c-'0'; //直接转换为数字
return c-'A'+10;// 妙妙秒
}
char get_char(int c){
if(c<10) return c+'0';
return c=c-10+'A';
} //***********定义函数时有返回值的话不要忘记返回不然会超时
vector<int>sub(vector<int> A,vector<int>B){
vector<int>C;
for(int i=0;i<A.size()||i<B.size();i++){
int t=0;
if(i<A.size()) t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%16);//因为是16进制,所以mod16
}//无进位,所以进位t初始值一直都为0
return C;
}
int main(){
string a,b;//服了》》》》》没输出的时候看一下是不是没有输入东西进去..........
while(cin>>a>>b){ //输入多组数据的时候这样来表示
//多组输入数据的时候要记得清空一下,要么就是定义在里面,这样就会重新初始化
A.clear();
B.clear();
for(int i=a.size()-1;i>=0;i--) A.push_back(get_int(a[i]));
for(int i=b.size()-1;i>=0;i--) B.push_back(get_int(b[i]));
auto C=sub(A,B);
for(int i=C.size()-1;i>=0;i--)
cout<<get_char(C[i]);
puts(" ");
}
return 0;
}