高精度加法、减法

对于位数较多的加法计算,会发生溢出,所以不能直接相加。

假如计算A+B,A和B各有10的6次方位,则把A、B分别看成10的六次方个元素的数组,按位相加,处理好进位,就可以实现高精度加法。

//字符串形式读入,存入数组
vector<int> add(vector<int>A,vector<int>B)//A、B都是从低位存储的,即A[0]储存个位.... 
{
	if(A.size()<B.size())
	return add(B,A);//保证A比B长
	 vector<int> ans;
	 int carry=0;//储存进位信息
	 for(int i=0;i<A.size();i++)
	 {
	 	carry=carry+A[i];//计算本位 
	 	if(i<B.size()) 
	 	carry=carry+B[i];//计算本位
		ans.push_back(t%10);
		t=t/10; 
	 } 
	 if(t==1)//最后还有进位 
	 ans.push_back(t);
	 return ans;//最低位保存个位 
}

高精度减法要按位相减,处理好借位 

/*在读入之后进行一些处理,保证A的长度大于B 
具体操作为:如果A>B,直接调用sub函数
否则,sub(B,A),在输出时先输出一个"-"*/ 
vector<int> sub(vector<int>A,vector<int>B)//A、B都是从低位存储的,即A[0]储存个位.... 
{
	 vector<int> ans;
	 int carry=0;//储存借位信息
	 for(int i=0;i<A.size();i++)
	 {
	 	carry=carry-A[i];//计算本位 
	 	if(i<B.size()) 
	 	carry=carry-B[i];//计算本位
		ans.push_back((carry+10)%10);//包含t<0和t>0的情况 
		if(t<0)//判断借位 
		carry=1;
		else
		carry=0;
	 } 
	 //返回的位数为a的位数,但存在1500-1499=1,返回0001,所以要弹出0
	 while(ans.size()>1&&ans.back()==0)
	 ans.pop_back; 
	 return ans;//最低位保存个位 
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值