【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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值