错误代码以及运行结果
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a,b;
/* while(cin>>hex>>a>>b)
cout<<a+b<<endl;*/
while(scanf("%x %x",&a,&b)!=EOF)
printf("%x\n",a+b);
return 0;
}
这里有两个错误
- 2c,其实答案应该为2C,为大写字母
- -1A-12 相加出现了莫名其妙的数,答案应该为-2C
错误原因
1、输出时要将16进制数的字母变成大写,默认是小写的。
2、计算机中不能直接显示16进制的负数,所以需要将负数转为正数输出。
3、注意使用__int64(这个没注意到。。什么时候才用__int64呢)
解决办法
1、字母变成大写,在c++中直接使用uppercase,作用为将输出的小写转换为大写,头文件是iomanip
2、16进制数的输出是以补码的形式进行的,负数的补码不可以直接输出(计算机组成原理)处理方法是先输出这个负数的绝对值,即一个正数,再在该正数的前面添加一个负号,得到想要的结果。
注:16进制输入c用%x c++用hex,加头文件iomanip
正确代码
#include<iomanip>
using namespace std;
int main(){
__int64 a,b,sum;
while(cin>>hex>>a>>b){
sum=a+b;
if(sum<0){
cout<<"-";
cout<<hex<<uppercase<<-sum<<endl;
}
else
cout<<hex<<uppercase<<sum<<endl;
}
return 0;
}
刚开始用printf接收__int64 自己的编译器没出错但是结果不对,提交杭电后显示wrong改了cin后就好了。
用printf时要注意,应该用 %I64d接收。