不得不说今天做的题怎么都这么坑呢。这道题若是要一个标准的程序员来做的话,就相当于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]);
else
printf("%d",a[i]);
printf("
");
}
int q3(char b[])//16#->10#
{
int i=0,sum=0;
int flag = 0;
for(i=0;b[i]!=' ';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
",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
",c);
else printf("-%I64X
",-c);
}
return 0;
}
下面是别人的博客:
http://blog.csdn.net/tigerisland45/article/details/51828341
附上一张截图: