【基础算法】高精度加法

算法核心

通过数组表示数字,来大范围地扩充可表示的数值范围

理解

高精度:普通的int、long、long long类型无法满足的数字范围,如11111111111111111111111111111111111111远超普通的数字类型范围,这时候就需要用到高精度

用途

完美解决因数字过大而导致的数值溢出问题

加法核心

a—加数1【由a1,a2,a3....翻转表示,例如数字123就表示为321】

b—加数2【由b1,b2,b3....翻转表示,例如数字456就表示为654】

c—和【由c1,c2,c3....翻转表示】

i—数组下标数

①c[i]+=a[i]+b[i]

②c[i+1]=c[i]/10【起到进位的作用】

③c[i]=c[i]%10【留余】

代码实现

#include <bits/stdc++.h>

using namespace std;

const int num=1e5;
char ca[num],cb[num];
int a[num],b[num];

void demo(char n1[],char n2[]){
	int len1=strlen(n1),len2=strlen(n2);
	int c[num];
	int len=len1>len2?len1+1:len2+1;//两数之和的位数最多为较大数位数加1 
	for(int i=1;i<=len1;++i){
		a[i]=n1[len1-i]-'0';
	} 
	for(int i=1;i<=len2;++i){
		b[i]=n2[len2-i]-'0';
	}
	for(int i=1;i<=len;++i){
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/10;
		c[i]=c[i]%10;
	}
	while(c[len]==0){//删除前导0 
		len--;
	}
	for(int i=len;i>0;--i){//转置输出和数组 
		cout<<c[i];
	}
} 

int main(){
	cin>>ca>>cb;
	demo(ca,cb);
	return 0 ;
}
//测试数据1 	000000001784697516584561854814863548156246100
//测试数据2 	00000001458767164516745617800
//测试结果 		1784697516584563313582028064901863900

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值