C语言实现两个超大数组相加

//任意两个一百位以上的整数相加;

//用字符串存储,数组输入相加后的和并输出;

//由于不知道相加后的结果,而且数组没办法提前知道所得结果的长度,所以需要将数组设置的尽量大;

#include<stdio.h>
#include<string.h>
#define N 200     //设定存储相加之和的数组大小;
int main(void)
{
	char s1[100],s2[100],*s=s1;    //注意这里的指针s指向字符数组s1上;
	int R[N],cp=0;
	//输入两个字符串;
	printf("输入第一个字符串:");
	gets(s1);
	printf("输入第二个字符串:");
	gets(s2);
	//初始化,因为数学运算相加需要从各位开始,所以刚开始两个数组的数字要从最后一位开始;
	int i=strlen(s1)-1;
	int j=strlen(s2)-1;
	int k=N-1;    //相加后的结果也要从 最后一位开始存储到数组中;
	//计算;
	while(i>-1&&j>-1)  //两个字符串都没有完;
	{

                  //因为字符型数字的转换成整型需要减去这个字符型数字的ASCII码;

                  //cp表示进位的数字,刚开始cp=0;

		int x=s1[i--]-'0'+s2[j--]-'0'+cp; 
		R[k--]=x%10;
		cp=x/10;
	}
	if(j>-1)   //如果s2没完,将本来指向s的指针指向s2;
	{
		i=j;
		s=s2;
	}
	while(i>-1)  //由上个if判断s1和s2那个没完,将剩下的数字按照位输入到整形数组R中;

	{
		int x=s[i--]-'0'+cp;    //此时的cp表示上面的循环中可能还有进位,所以这里的cp不需要清空;
		R[k--]=x%10;
		cp=x/10;
	}
	if(cp)  //*重要*   判断最高位是否需要进位;
		R[k--]=cp;
	//输出;
	printf("\n两个字符串相加后的存储结果为:\n");
	for(i=k+1;i<N;i++)
		printf("%d",R[i]);
	printf("\n");
	return 0;
}

//结果: 举例:   s1     123456789

                           s2      987654321


//不懂的可以留言,希望能帮到你,看到留言我会回复;

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值