[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;
}