HDU2057A + B Again

HDU 水題 A + B Again

明明是一道水題,我卻傻不拉幾的將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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章