【HDOJ】1002 A+B

这道题的本质就是两个超级大数相加。光是用long long类型的整型是搞不定的。

由于题目已经说明数字不会超过1000位,所以可以采用顺序表来进行数据的存储和相加。值得注意的是,由于数字位数的不确定,数组中存储从数组最后一位开始存,后续需要将有效位数倒置处理。

代码如下:

#include<stdio.h>
#define MAXL 1000
void read(int a[])
{
	char x=getchar();
	int i=MAXL-1,n=0;
	while('0'<=x && x<='9')
	{
		a[i]=(int)(x-'0');
		i--;
		n++;
		x=getchar();
	}
	for(int j=0;j<n/2;j++)
	{
		int k=a[i+j+1];
		a[i+j+1]=a[MAXL-j-1];
		a[MAXL-j-1]=k;
	}
	
}
void print(int a[])
{
	int flag=1;
	for(int i=0;i<MAXL;i++)
	{
		if(a[i]==0 && flag)
			continue;
		else
		{
			flag=0;
			printf("%d",a[i]);
		}
	}
}
void printSum(int a[],int b[])
{
	int c[MAXL]={0};
	for(int i=MAXL-1;i>0;i--)
	{
		if(c[i]+a[i]+b[i]>=10)
		{
			c[i]+=a[i]+b[i]-10;
			c[i-1]++;
		}else{
			c[i]+=a[i]+b[i];
		}		
	}
	print(a);
	printf(" + ");
	print(b);
	printf(" = ");
	print(c);
	printf("\n");
}
int main()
{
	int n;
	scanf("%d\n",&n);

	for(int i=0;i<n;i++)
	{
		int a[MAXL]={0};
		int b[MAXL]={0};
		if(i!=0)
		{
			printf("\n");
		}
		
		read(a);
		//print(a);
		read(b);	
	    //print(b);
		printf("Case %d:\n",i+1);
		printSum(a,b);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值