A + B Again----hdu-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
问题简述
A+B问题的升级版。注意十六进制数的输入和输出。
程序分析
C++中可以直接输入十六进制数,也可以直接输出。另外需注意,十六进制负数会以补码形式存在,因此若结果为负数,需转换。转换方法为:对输出值取绝对值,例如:X=-X;即可。十六进制数默认输出为小数,需转换。
输入十六进制数::cin>>hex>>n;
输出十六进制数::cout<<hex<<n;
转换大写字母::cout<<setiosflags(ios::uppercase)<<hex<<n;
控 制 符 | 作 用 |
---|---|
dec | 设置整数为十进制 |
hex | 设置整数为十六进制 |
oct | 设置整数为八进制 |
setbase(n) | 设置整数为n进制(n=8,10,16) |
setfill(n) | 设置字符填充,c可以是字符常或字符变量 |
setprecision(n) | 设置浮点数的有效数字为n位 |
setw(n) | 设置字段宽度为n位 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法表示 |
setiosflags(ios::left) | 输出左对齐 |
setiosflags(ios::right) | 输出右对齐 |
setiosflags(ios::skipws) | 忽略前导空格 |
setiosflags(ios::uppercase) | 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。 |
setiosflags(ios::showpos) | 输出正数时显示"+"号 |
setiosflags(ios::showpoint) | 强制显示小数点 |
resetiosflags() | 终止已经设置的输出格式状态,在括号中应指定内容 |
AC程序如下:
//hdu-2057
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
long long a, b, c;
while (cin >> hex >> a >> b)
{
c = a + b;
if (c < 0)
{
c = -c;
cout << "-" << setiosflags(ios::uppercase) << hex<< c;
}
else cout <<setiosflags(ios::uppercase)<< hex<<c;
cout << endl;
} return 0;
}