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
问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2057
问题分析:
代码1
- cin>>hex>>a 此时如果输入12,那么a就是ox12,也就是说此时的12是十六进制的,实际上a的值为18(十进制)。
- oct为八进制,hex为十六进制,dec为十进制。
- 头文件 #include <iomanip> ,主要是对cin,cout之类的一些操纵运算子
- setiosflags(ios::uppercase) 16进制数大写输出
代码2
-
Int64是有符号 64 位整数数据类型,相当于C++中的long long、 C# 中的 long 和 SQL Server 中的 bigint,表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。
-
__int64不能输出负数,如果结果为负,则需要先输出负号,在取结果的绝对值
源代码1
#include <iostream>
#include <cstdio>
#include <iomanip> //setiosflags(ios::uppercase)头文件
using namespace std;
int main()
{
long long n, m; //int会溢出
while(cin >> hex >> n >> m) //cin >> hex 输入为16进制
{
n += m;
if(n >= 0) //如果结果大于等于0,则直接以十六进制大写输出
cout << setiosflags(ios::uppercase)<<hex << n << endl;
else //否则先输出一个符号,在输出-n
cout << '-' << setiosflags(ios::uppercase)<<hex << -n << endl;
}
return 0;
}
源代码2
#include<stdio.h>
int main()
{
__int64 a,b; //__int64不能输出负数
while(scanf("%I64X %I64X",&a,&b)!=EOF)
{
a=a+b;
if(a<0)
{
printf("-");
a=-a;
}
printf("%I64X\n",a); //__int64的输出格式
}
return 0;
}