多组大数相加

#include <stdio.h>
#include <string.h>
int main()
{
	char a[100000], b[100000];
	int a1[100000], b1[100000], result[100000];
	int len, i, j;
	while (~scanf("%s%s", a, b))//按位取反,遇到ctrl+z再按回车会结束输入
	{
		len = strlen(a) > strlen(b) ? strlen(a) : strlen(b);
		for (i = 0, j = strlen(a)-1; i < strlen(a); i++, j--)
		{
			a1[i] = a[j]-'0';//a1存入从个位开始的十进制中的数据,减去'0'是将ASCII码值变为十进制中的数据,
		}//注: a1中的第一个数据a1[0]是a[len-1]中个位的数字ASCII值
		//因为从个位开始相加,满10进一。
		for (i = 0, j = strlen(b)-1; i < strlen(b); i++, j--)
		{
			b1[i] = b[j]-'0';
		}
		for (i = 0; i < len; i++)
		{
			result[i] += a1[i]+b1[i];//将对应的各个位相加
			if (result[i] > 9)//满十,则此数组元素-10,并再下一位数据+1,所以上面result是+=(初始化是0),而不是=;
			{
				result[i] -= 10;
				result[i+1] += 1;
			}
		}
		if (result[len] > 0)
		{
			len++;//因为满十进一,所以数组长度( 长度取的是最长的位数,所以只可能会加一位)
			//会往上加,所以判断result[len]是否非零,是,长度+1,因为之后要输出这些长度的数据。
		}
		for (i = len-1; i >= 0; i--)
		{
			printf("%d", result[i]);
		}
		printf("\n");
	for (i = 0; i < len; i++)//因为是多组数据的输入输出,所以要变为0,
	{//注不能用a[100000] = {0},只能再初始化的时候这样用。
		a[i] = 0;//所以此处用循环来清零。
		a1[i] = 0;
		b[i] = 0;
		b1[i] = 0;
		result[i] = 0;
	}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值