HDU 2057 A + B Again
解题报告:
两个十六进制的数的加法,十六进制的数可以直接输入和输出,但仅限于非负数,输入输出的格式控制符是%X,但这题数据范围较大,要用到__int64,所以格式控制符应该用
%I64X,另外当结果为负数时处理一下就可以了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 int main() { 3 char str1[1000],str2[1000]; 4 __int64 A,B,sum; 5 while(scanf("%I64X%I64X",&A,&B)!=EOF) { 6 A+=B; 7 if(A<0) { 8 printf("-"); 9 A*=(-1); 10 } 11 printf("%I64X\n",A); 12 } 13 return 0; 14 } 15 16 17 18 /*#include<cstdio> 19 #include<cstring> 20 #include<cmath> 21 char ch[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 22 int change1(char *str) { 23 int len = strlen(str),num=0; 24 int quan=1; 25 for(int i = len-1;i>=0;--i) { 26 if(str[i]>='0'&&str[i]<='9') 27 num+=(str[i]-'0')*quan; 28 else if(str[i]>='A'&&str[i]<='F') 29 num+=(str[i]-'A'+10)*quan; 30 quan*=16; 31 } 32 if(str[0]=='-') 33 num=num*(-1); 34 return num; 35 } 36 void change2(__int64 sum) { 37 if(sum<0) { 38 printf("-"); 39 sum*=(-1); 40 } 41 char str[1000],str4[1000]; 42 int z=0; 43 if(sum==0) 44 str[z++]='0'; 45 while(sum) { 46 str[z++]=ch[sum%16]; 47 sum/=16; 48 } 49 str[z]=NULL; 50 int len=strlen(str); 51 for(int i=0;i<len;++i) 52 str4[i]=str[len-i-1]; 53 str4[len]=NULL; 54 printf("%s\n",str4); 55 }*/