[C++]超高位数的高精度算法-加法 用于完美(划掉)解决爆内存问题

高精度加法

原理:

将数字分成数组存入,逐位相加

原来int的要开很大的,如10000000000000000,或者有些long long都不够,在char里面只要17位

Q:为什么?

A:因为原来是将一个数存入,现在分成字符存入数组,进行加法运算

首先将读入的字符存入int数组

读入数据1:


	for(int i=1;i<=a[0];i++){
		a[i]=a1[a[0]-i]-'0';
	}

读入数据2:


	for(int j=1;j<=b[0];j++){
		b[j]=b1[b[0]-j]-'0';
	}
	

读入之后

c数组负责加法运算

lenc是c的长度

x是进位的多少,如果这个数小于10,除以10是0

都懂吧?

	while(lenc<=e){
	
		c[lenc]=a[lenc]+b[lenc]+x;
			x=c[lenc]/10;
			c[lenc]%=10;
			lenc++;
		
		
}

然后输出: 

	for(int i=lenc;i>=1;i--){
	printf("%d",c[i]);
	}

整段代码:

#include<cstdio>
#include<string>
using namespace std;
	char a1[100],b1[100];
int a[100],b[100],c[100],x=0,e,lenc=1;
int maxaaa(int a,int b){
	if(a>b){
		return a;
	}else return b;
}
int main(){
	
	gets(a1);
	gets(b1);
	a[0]=strlen(a1);
	b[0]=strlen(b1);
	e=maxaaa(a[0],b[0]);
	for(int i=1;i<=a[0];i++){
		a[i]=a1[a[0]-i]-'0';
	}
	for(int j=1;j<=b[0];j++){
		b[j]=b1[b[0]-j]-'0';
	}
	while(lenc<=e){
	
		c[lenc]=a[lenc]+b[lenc]+x;
			x=c[lenc]/10;
			c[lenc]%=10;
			lenc++;
		
		
}
if(c[lenc]==0){
	lenc--;
}

	for(int i=lenc;i>=1;i--){
	printf("%d",c[i]);
	}
	
	
	return 0;
}
原文地址:https://www.cnblogs.com/shadowwolf/p/12943798.html