大整数加法

#include "StdAfx.h"
#include "subStr.h"
#include<iostream>
using namespace std;

#define MAX_LENTH 201


void add(int len,int *bigNumA,int *bigNumB){
//以下为执行加法累加,逐位相加;tag记录进位
		int i,tag=0;
		for(i=0;i<len;i++){
			bigNumA[i]+=bigNumB[i];
			if(tag){
				bigNumA[i]++;
				tag=0;
			}
			if(bigNumA[i]>=10){
				tag=1;
				bigNumA[i]-=10;
			}
		}
		if(tag) printf("1");
		for(i=len-1;i>=0;i--){
			printf("%d",bigNumA[i]);
		}
		printf("\n");
}
int main(){
	char numA[MAX_LENTH],numB[MAX_LENTH];
	int bigNumA[MAX_LENTH],bigNumB[MAX_LENTH];
	int i,j,pos,len,tag;
	while(scanf("%s %s",numA,numB)!=EOF){

		//注意两点,memset第三个参数是字节数,不能用strlen(bigNumA)。例如:
		//memset(bigNumA,0,strlen(bigNumA))是错误的。
		//bigNumA[MAX_LENTH]={0}这种将数组元素统一置为0的方式只有在声明的时候才能使用。
		//以下的“//”解开后是会出错的。
		memset(bigNumA,0,sizeof(bigNumA));
		memset(bigNumB,0,sizeof(bigNumB));
		//bigNumA[MAX_LENTH]={0};
		//bigNumB[MAX_LENTH]={0};

		//以下是将接收到的大整数numA和numB存储到bigNumA和bigNumB中,个位对应bigNumx[0],以此类推。

		pos=0;
		for(i=strlen(numA)-1;i>=0;i--){
			bigNumA[pos++]=numA[i]-'0';
		}
		pos=0;
		for(i=strlen(numB)-1;i>=0;i--){
			bigNumB[pos++]=numB[i]-'0';
		}

		if(strlen(numA)>strlen(numB))
		{
			len=strlen(numA);
		}else{
			len=strlen(numB);
		}
		add(len,bigNumA,bigNumB);
	}
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值