算法AcWing 792. 高精度减法

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法AcWing 792. 高精度减法相关的知识,希望对你有一定的参考价值。

算法概述

  1. A-B中A要大于B:定义一个判断A>=B 的cmp函数
  2. sub()函数中,定义一个t表示借位,若本位计算完后t<0,则令t=1表示借了一位。
  3. 删除前导零(当数字不止最后一个0时)
  4. 若A小于B,则要提前输出-

代码

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

const int N=1e6+10;
vector<int>A,B,C;

//判断A B大小 :A>=B
int cmp(vector<int>&A,vector<int>&B)
{
	if(A.size()!=B.size())  return A.size()>B.size();
	
	for(int i=A.size()-1;i>=0;i--)
	{
		if(A[i]!=B[i]) return A[i]>B[i];
	}
	return 1;
}

void sub(vector<int>&A,vector<int>&B)
{
	int t=0;
	for(int i=0;i<A.size();i++)
	{
		t=A[i]-t;//借位
		if(i<B.size())  t=t-B[i];//B在这里有位才减
		C.push_back((t+10)%10);
		if(t<0) t=1;
		else t=0; 
	}
	
	while(C.size()>1&&C.back()==0) C.pop_back();
}

int main()
{
	string a,b;
	cin>>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');
	
	if(cmp(A,B)) sub(A,B);	
	else 
	{
		sub(B,A);
		cout<<"-";
	}
	
	for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
} 

以上是关于算法AcWing 792. 高精度减法的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 792.高精度减法

AcWing基础算法课Level-2 第一讲 基础算法

AcWing 793. 高精度乘法

算法AcWing 791. 高精度加法

高精度算法—减法篇

算法AcWing 793. 高精度乘法