HDU 2057 A + B Again

解题报告:

两个十六进制的数的加法,十六进制的数可以直接输入和输出,但仅限于非负数,输入输出的格式控制符是%X,但这题数据范围较大,要用到__int64,所以格式控制符应该用

%I64X,另外当结果为负数时处理一下就可以了。

 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 }*/
View Code

 

 

posted @ 2013-05-29 21:06  xiaxiaosheng  阅读(152)  评论(0编辑  收藏  举报