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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值