杭电OJ 2057. A + B Again

题目描述:

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

 

思路:

题目要求以16进制的形式接收两个整形数据,将这两个数相加,然后以16进制的形式输出计算结果,其中,输出的16进制数的字母要求大写。

首先介绍一下iomanip头文件。iomanip,io代表输入输出,manip是manipulator(操纵器)的缩写。iomanip头文件里是一些操纵cin,cout的运算子,主要是为了实现格式化输入输出。

题目要求以16进制的形式接收和输出整形数据,因此可以使用iomanip头文件中的hex控制函数。另外,输出的16进制数的字母默认是小写的,题目要求将其改为大写,同样可以使用iomanip头文件中的uppercase控制函数实现此功能。

此题的一个坑是关于计算结果是负数的处理。在C++中,16进制数的输出是以补码的形式进行的,正数的补码就是其本身,可以直接输出;而负数的补码是这个数的反码再加1,其中最高位代表符号位,不可以直接输出,需要进一步处理。计算结果是负数的处理方法是先输出这个负数的绝对值,即一个正数,再在该正数的前面添加一个负号,得到想要的结果。

 

实现(C++):

#include <iostream>
#include <cstdio> 
#include <iomanip> 
using namespace std;

int main(){
	
	long long m, n;
	long long result;
	
	while(cin>>hex>>m>>n){
		
		result=m+n;
		
		if(result<0){
			cout<<"-";
			cout<<hex<<uppercase<<-result<<endl;
		}
		else
			cout<<hex<<uppercase<<result<<endl;
		
	}
	
}

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值