模板 高精度减法

两个大于等于零的
q<p的话就swap(比较大小需要长度
去除前置零
若q<p 输出负号“-”
单独输出特殊情况0

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int a[11000],b[11000],la,lb;
string q,p;
bool pd;
void subtraction(int a[],int b[]){
    
    
	int c[11000]={
    
    },mxl=max(la,lb);
	for(int i=0;i<la||i<lb;i++){
    
    
		if(a[i]<b[i]){
    
    
			a[i+1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i];
	}
	while(c[mxl]==0&&mxl>=0)mxl--;
	if(pd)cout<<"-";
	for(int i=mxl;i>=0;i--)cout<<c[i];
	if(mxl==-1)cout<<"0";
}
int main(){
    
    
	cin>>q>>p;
	if((q<p&&q.size()==p.size())||q.size()<p.size()){
    
    
		swap(q,p);//
		pd=true;
	}
	la=q.size(),lb=p.size();
	for(int i=0;i<la;i++)a[i]=q[la-i-1]-'0';
	for(int i=0;i<lb;i++)b[i]=p[lb-i-1]-'0';
	subtraction(a,b);

	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/Minelois/article/details/114108077
今日推荐