高精度加法心得体会

       高精度加法是基于我们计算加法而设计的一种算法,在C++中我们创建的整数位数不能过大,当我们有大整数计算需求时,就要用到这个算法。

 

#include<iostream>
#include<vector>
using namespace std;

vector<int> add(vector<int>&A,vector<int>&B)//主体函数的功能是S
{
	vector<int >C;
	int t=0;
	for(int i=0;i<A.size()||i<B.size();i++)
	{
		if(i<A.size())t+=A[i];//这里是if()条件句 不是for()
		if(i<B.size())t+=B[i];
		
		C.push_back(t%10);
		t/=10;
		
		
		
	}
	if(t)C.push_back(1);
	return C;
	
	
	
	
}

       这是高精度加法的功能函数,在这里我们需要传进两个向量类,向量类的作用其实是为了更方便地处理数据,用数组也没问题。

这个函数模仿了我们人类计算加法的思路,即逢十进一。

for(int i=0;i<A.size()||i<B.size();i++)
	{
		if(i<A.size())t+=A[i];//这里是if()条件句 不是for()
		if(i<B.size())t+=B[i];
		
		C.push_back(t%10);
		t/=10;
		
		
		
	}

       这段代码中for循环同时涉及到A,B两个向量类,if语句也是如此,这是为了防止两个大整数的位数不同而导致出错,比如1234+123,如果没有for 和 if 语句,1234中的1无法参与运算。

C.push_back语句的作用是把A[i]+B[i]的结果落下来,比如1234+123,计算的时候我们是先算4+3=7,这样会把7落下来,这条语句的作用就是如此。

t/=10的作用是以防计算出现进一的情况,比如15+17,算5+7=12,计算十位1+1的时候要加上个位计算进上来的1,这条语句的作用就是如此。

int main()
{
	string a,b;
	cin>>a>>b;
	vector<int>A,B;
	
	for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
	for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');
	
	auto C=add(A,B);
	
	for(int i=C.size()-1;i>=0;i--)cout<<C[i];
	
	
	
	
}

        这是算法主函数部分,主函数做的工作主要是建立并初始化两个向量类用于计算,建立向量类时,是将每个字符串从最后一位开始往外拿,这样我们就可以从个位开始做加法了。

注意最后输出的时候也是从后往前输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值