精度问题(大整数减法)

 题目:求两个大整数(大于long long)之差

#include<bits/stdc++.h>
using namespace std;
vector<int> A,B,C;//动态数组
int t=0;
void pd(vector<int> &A,vector<int> &B){//判断A,B两个数的大小 
//t=0,代表A=B ; t=1,代表A>B ; t=2,代表A<B
	if(A.size()>B.size()){
		t=1;
	}
	else if(A.size()<B.size()){
		t=2;
	}
	else{
		for(int i=A.size()-1;i>=0;i--){
			if(A[i]>B[i]){
				t=1;
				break;
			}
			else if(A[i]<B[i]){
				t=2;
				break;
			} 
		}
	}
}
void jian(vector<int> &A,vector<int> &B){//相减 
	int t=0;
	for(int i=B.size();i<A.size();i++){//将小的那个数,前面补齐和大的那个数一样长 
		B.push_back(0);
	}
	for(int i=0;i<A.size();i++){
			if((A[i]+t)>=B[i]){//判断需不需要借一位 
				if(i!=A.size()-1|| A[i]+t!=B[i]){//判断最后的两个数不相等,这样可以避免相减完之后开头存在0 
					C.push_back(A[i]+t-B[i]);
					t=0;
				}
			}
			else{
				C.push_back(A[i]+t-B[i]+10);
				t=-1;
			}
	}
}
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');

	pd(A,B);//判断A,B的大小 
	
	if(t==0)	cout<<0; 
	else if(t==1)	jian(A,B);//大的数在前面,小的数在后面 
	else if(t==2)	jian(B,A);
	
	for(int i=C.size()-1;i>=0;i--)	cout<<C[i];
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值