明明是一道水題,我卻傻不拉幾的將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;
}