【HDU】2057 A + B Again
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057
题目:
Problem Description
There must be many A + B problems in our HDOJ , now a new one is coming.
Give you two hexadecimal integers , your task is to calculate the sum of them,and print it in hexadecimal too.
Easy ? AC it !Input
The input contains several test cases, please process to the end of the file.
Each case consists of two hexadecimal integers A and B in a line seperated by a blank.
The length of A and B is less than 15.Output
For each test case,print the sum of A and B in hexadecimal in one line.
Sample Input
+A -A
+1A 12
1A -9
-1A -12
1A -AA
Sample Output
0
2C
11
-2C
-90
代码:
最初(有错误):
注意输出应为大写,所以是%X。此外16进制负数的负号不是“-”表示,所以需要自行输出“-”。
#include <stdio.h>
int main()
{
int a,b;
int ans;
while (scanf("%x%x",&a,&b) != EOF)
{
ans = a + b;
if (ans < 0)
{
printf("-");ans *= -1;
}
printf("%X\n",ans);
}
return 0;
}
错误原因为,题目说明,输入的16进制数最大为15位,转换为2进制(每1位16进制,可转为4位2进制数)60位,则32位int型已经无法乘下。可以采用__int64(vc中可用)或long long来装即可。 这里我的最终写法使用了__int64(用的vc没法用long long)
最终代码(正解):
#include <stdio.h>
int main()
{
__int64 a,b;
__int64 ans;
while (scanf("%I64x%I64x",&a,&b) != EOF)
{
ans = a + b;
if (ans < 0)
{
printf("-");ans *= -1;
}
printf("%I64X\n",ans);
}
return 0;
}