十六进制加法
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; }