Y - 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
Solution:
这题挺有意思的~才打算记录一下
不能直接copy哦,我写的只是个愚蠢杂糅的方法,copy的话太明显了吼
#include<iostream>
#include<iomanip>
#include<math.h>
#include<string>
using namespace std;
char w[19] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
int main()
{
string a, b;
while (cin >> a >> b)
{
long long aa, bb;
aa = bb = 0;
int af, bf;
af = bf = 0;
for (int i = 0; i < a.size(); i++)
{
if (a[i] == '-')
{
af = 1;
continue;
}
else if (a[i] == '+')
{
continue;
}
else
{
if (a[i] >= 48 && a[i] <= 57)
{
aa += (a[i] - '0') * pow(16, a.size() - 1 - i);
}
else
{
switch (a[i])
{
case 'A':aa += 10 * pow(16, a.size() - 1 - i); break;
case 'B':aa += 11 * pow(16, a.size() - 1 - i); break;
case 'C':aa += 12 * pow(16, a.size() - 1 - i); break;
case 'D':aa += 13 * pow(16, a.size() - 1 - i); break;
case 'E':aa += 14 * pow(16, a.size() - 1 - i); break;
case 'F':aa += 15 * pow(16, a.size() - 1 - i); break;
}
}
}
}
for (int i = 0; i < b.size(); i++)
{
if (b[i] == '-')
{
bf = 1;
continue;
}
else if (b[i] == '+')
{
continue;
}
else
{
if (b[i] >= 48 && b[i] <= 57)
{
bb += (b[i] - '0') * pow(16, b.size() - 1 - i);
}
else
{
switch (b[i])
{
case 'A':bb += 10 * pow(16, b.size() - 1 - i); break;
case 'B':bb += 11 * pow(16, b.size() - 1 - i); break;
case 'C':bb += 12 * pow(16, b.size() - 1 - i); break;
case 'D':bb += 13 * pow(16, b.size() - 1 - i); break;
case 'E':bb += 14 * pow(16, b.size() - 1 - i); break;
case 'F':bb += 15 * pow(16, b.size() - 1 - i); break;
}
}
}
}
if (af == 1)
aa *= -1;
if (bf == 1)
bb *= -1;
long long sum = aa + bb;
if (sum == 0)
{
cout << "0" << endl;
continue;
}
if (sum < 0)
{
sum *= -1;
string str = "";
while (sum)
{
int yu = sum % 16;
str += w[yu];
sum /= 16;
}
cout << "-";
for (int i = str.size() - 1; i >= 0; i--)
cout << str[i];
}
else
{
string str = "";
while (sum)
{
int yu = sum % 16;
str += w[yu];
sum /= 16;
}
for (int i = str.size() - 1; i >= 0; i--)
cout << str[i];
}
cout << endl;
}
}