明明是一道水题,我却傻不拉几的将16进制转化为10进制,然后10进制加减再16进制输出
我们完全可以用C当中的16进制输入输出
%x进行输入输出
但是考虑到时64位,因为32位会溢出的
scanf("%llx%llx",&a,&b)即可
printf("%llx",a+b)会存在问题的
1,输出时x要大写 %llX 可以输出大写字母,
2,输出时不会输出负数(只输出无符号)的,所以需要判断
#include<stdio.h>
int main()
{
//__int64 a,b;
long long a,b;//与__int64 a,b 等价
while(scanf("%llx%llx",&a,&b)!=EOF)
{
long long result = a+b;
if(result>=0)
printf("%llX\n",result);
else
printf("-%llX\n",-result);
}
return 0;
}
当然作为我一开始愚蠢的行为,我表示我真的是太笨啦!
我想在本篇博客上记录一下,有兴趣的也可以看一下!
#include<stdio.h>
#include<string.h>
#include<math.h>
void fun(int t)
{
if(t==0)
return ;
int temp=t%16;
t=t/16;
fun(t);
switch(temp)
{
case 10:printf("a");break;
case 11:printf("b");break;
case 12:printf("c");break;
case 13:printf("d");break;
case 14:printf("e");break;
case 15:printf("f");break;
default:printf("%c",temp+'0');break;
}
}
int main()
{
char a[17],b[17];
int lena,lenb;
while(scanf("%s%s",a,b)!=EOF)
{
getchar();
lena=strlen(a);
lenb=strlen(b);
if(lena>=15||lenb>=15)
break;
int i,j;
int suma=0,sumb=0,sum;
for(i=lena-1;i>=0;i--)
{
switch(a[i])
{
case 'a':
case 'A':suma+=10*(int)(pow(16,lena-i-1));break;
case 'b':
case 'B':suma+=11*(int)(pow(16,lena-i-1));break;
case 'c':
case 'C':suma+=12*(int)(pow(16,lena-i-1));break;
case 'd':
case 'D':suma+=13*(int)(pow(16,lena-i-1));break;
case 'e':
case 'E':suma+=14*(int)(pow(16,lena-i-1));break;
case 'f':
case 'F':suma+=15*(int)(pow(16,lena-i-1));break;
case '+':suma=suma;break;
case '-':suma=-suma;break;
default:suma+=((a[i]-'0')*(int)(pow(16,lena-i-1)));break;
}
}
for(j=lenb-1;j>=0;j--)
{
switch(b[j])
{
case 'a':
case 'A':sumb+=10*(int)(pow(16,lenb-j-1));break;
case 'b':
case 'B':sumb+=11*(int)(pow(16,lenb-j-1));break;
case 'c':
case 'C':sumb+=12*(int)(pow(16,lenb-j-1));break;
case 'd':
case 'D':sumb+=13*(int)(pow(16,lenb-j-1));break;
case 'e':
case 'E':sumb+=14*(int)(pow(16,lenb-j-1));break;
case 'f':
case 'F':sumb+=15*(int)(pow(16,lenb-j-1));break;
case '+':sumb=sumb;break;
case '-':sumb=-sumb;break;
default:sumb+=((b[j]-'0')*(int)(pow(16,lenb-j-1)));break;
}
}
sum=suma+sumb;
if(sum<0)
{
sum=-sum;
printf("-");
fun(sum);
printf("\n");
}
else if(sum==0)
printf("%d\n",0);
else
{
fun(sum);
printf("\n");
}
}
return 0;
}