十六进制加法

Problem C 

Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)

Total Submission(s) : 21   Accepted Submission(s) : 6

Font: Times New Roman | Verdana | Georgia

 Font Size: ← →

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


#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int main()
{
    char a[20],b[20];
     __int64 L1,L2,i,sum1,sum2,sum3,j,c[1000];
    while(cin>>a>>b)
    {
        L1=strlen(a);
        L2=strlen(b);
        sum2=sum1=0;
        if(a[0]=='-'||a[0]=='+')
            i=1;
        else
            i=0;
        for(;i<L1;i++)
        {
            sum1*=16;
            if(a[i]>='A')
                sum1+=a[i]-'A'+10;
            else
                sum1+=a[i]-'0';    
        }
        if(b[0]=='-'||b[0]=='+')
            i=1;
        else
            i=0;
        for(;i<L2;i++)
        {
            sum2*=16;
            if(b[i]>='A')
                sum2+=b[i]-'A'+10;
            else
                sum2+=b[i]-'0';    
        }
        if(a[0]=='-'&&b[0]=='-')
            sum3=-(sum1+sum2);
        else if(a[0]!='-'&&b[0]=='-')
            sum3=sum1-sum2;
        else if(a[0]=='-'&&b[0]!='-')
            sum3=sum2-sum1;
        else
            sum3=sum2+sum1;
        if(sum3>=0)
        {
            for(i=0;;i++)
            {
                c[i]=sum3%16;
                if(sum3/16==0)
                break;
                sum3=sum3/16;
            }
            for(j=i;j>=0;j--)
            {
                if(c[j]>9)
                printf("%I64c",char(c[j]+'A'-10));
                else
                    printf("%I64d",c[j]);
            }
            printf("\n");
        }
        else
        {
            sum3=-sum3;
            for(i=0;;i++)
            {
                c[i]=sum3%16;
                if(sum3/16==0)
                break;
                sum3=sum3/16;
            }
            cout<<"-";
            for(j=i;j>=0;j--)
            {
                if(c[j]>9)
                printf("%I64c",char(c[j]+'A'-10));
                else
                    printf("%I64d",c[j]);
            }
            printf("\n");
        }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/heqinghui/p/2618796.html