hdu 2057 A + B Again

来源:互联网 发布:寻侠境界突破数据 编辑:程序博客网 时间:2024/06/07 05:18

题目

不得不说今天做的题怎么都这么坑呢。这道题若是要一个标准的程序员来做的话,就相当于hdu上面的第一个题一样,毫无意义。。

但是我居然WA了,看到这个题的第一反应就是,要把16# ——>10#,然后再把10# ——>16#,来做,以为这是一个进制的转换,最后看博客才知道,原来可以直接输入输出16#,不禁觉得自己好傻啊 ^-^ 

下面是刚开始愚蠢的做法:

#include <stdio.h>#include <math.h>void p3(int n)//10#->16#{int a[20],i=0;int flag = 0;if(n<0) { flag = 1; n = -n;}if(n==0) printf("0");while(n!=0){a[i++]=n%16;if(a[i-1]>=10)a[i-1]=a[i-1]-10+65;n=n/16;}if(flag==1) printf("-");for(i=i-1;i>=0;i--)if(a[i]>=10)printf("%c",a[i]);elseprintf("%d",a[i]);printf("\n");}int q3(char b[])//16#->10#{int i=0,sum=0;int flag = 0;for(i=0;b[i]!='\0';i++){if(b[i]>='A'&&b[i]<='F')sum=sum*16+b[i]-55;else if(b[i]>='0'&&b[i]<='9')sum=sum*16+b[i]-'0';else {if(b[i]=='-')flag = 1;}}if(flag == 1)return -sum;else return sum;}int main(){char a[20],b[20];while(~scanf("%s%s",a,b)){int sum1 = q3(a);int sum2 = q3(b);//printf("sum1 = %d sum2 = %d\n",sum1,sum2);int sum = sum1+sum2;p3(sum);}return 0;}

下面是正确的代码:

#include<stdio.h>int main(){__int64 a,b,c;while(~scanf("%I64X %I64X",&a,&b)){c = a+b;if(c>=0) printf("%I64X\n",c);else printf("-%I64X\n",-c);}return  0;}

下面是别人的博客:

http://blog.csdn.net/tigerisland45/article/details/51828341

附上一张截图: