A + B Again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 33090 Accepted Submission(s): 13407
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 !
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.
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
Author
linle
Source
题目解析:
就是让计算十六进制加减法,模拟一下就可以了,非常的简单,注意中间的临时储存要用long long,数比较大,很简单,1A,直接看一下代码把
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 10000;
char c1[maxn],c2[maxn];
char a[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
stack <char> sta;
int main()
{
//freopen("in.txt","r",stdin);
while(cin>>c1>>c2)
{
while(!sta.empty())
sta.pop();
long long ans =0 ;
long long flag1=1,flag2=1;
long long ans1=0,ans2=0;
long long a1=1,a2=1;
long long len1 = strlen(c1);
long long len2 = strlen(c2);
if(c1[0]=='-')
flag1 = -1;
if(c2[0]=='-')
flag2 = -1;
for(long long i=len1-1; i>=0; i--)
{
if(c1[i]>='0'&&c1[i]<='9')
{
ans1=ans1+a1*(c1[i]-'0');
a1*=16;
}
if(c1[i]>='A'&&c1[i]<='F')
{
ans1=ans1+a1*(c1[i]-'A'+10);
a1*=16;
}
}
for(long long i=len2-1; i>=0; i--)
{
if(c2[i]>='0'&&c2[i]<='9')
{
ans2=ans2+a2*(c2[i]-'0');
a2*=16;
}
if(c2[i]>='A'&&c2[i]<='F')
{
ans2=ans2+a2*(c2[i]-'A'+10);
a2*=16;
}
}
long long flag = 1;
ans1*=flag1;
ans2*=flag2;
ans=ans1+ans2;
if(ans<0)
{
flag=-1;
ans=-ans;
}
if(ans==0)
{
cout<<"0"<<endl;
continue;
}
if(flag==1)
{
while(ans)
{
sta.push(a[ans%16]);
ans/=16;
}
}
else
{
cout<<"-";
while(ans)
{
sta.push(a[ans%16]);
ans/=16;
}
}
while(!sta.empty())
{
cout<<sta.top();
sta.pop();
}
cout<<endl;
}
return 0;
}