题目:A + B Again
Problem Description
给出两个十六进制的数,求他们的和
关键:理解十六进制在计算机如何存储,然后用printf函数是如何显示出来的。无论什么进制的数,在计算机都是以二进制的补码形式存储的,而格式转换符决定了以什么格式读取数据,和输出数据。
十六进制,八进制和十进制的不同地方,如果要输出的负数,十六进制和八进制是不会有负号的,只会输出补码,例如十六进制数a = -0x1,则输出是FFFFFFFF,(假设a是32为整数,),八进制数a = -01,输出时37777777777
所以这道题的关键是要处理如果得到的值是负值,需要将他变成正值,再添加一个符号。
在正数前面的+是无所谓的。
#include <cstdio>
int main() {
long long int A, B;
while(scanf("%llX %llX", &A, &B) != EOF) {
if(A + B >= 0) {
printf("%llX\n", A + B);
}
else {
printf("-%llX\n", -(A + B));
}
//任何数都是以二进制在机器中存储的,而格式转换符只是将二进制数转换成所需要的进制,十进制比较方便,是带符号输出的
}
return 0;
}
这个是按照数来做的,还有一种思路,当成字符串来处理,没做出来。WA。