搜索
您的当前位置:首页正文

【刷题】基础算法——高精度减法

来源:独旅网

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

vector<int> A, B;

// A >= B return true 
bool 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 true;
}

vector<int> sub(vector<int> &A, vector<int> &B) {
	int t = 0; // A[i] - B[i] + 借位 
	vector<int> C;
	for (int i = 0; i < A.size(); i ++ ) {
		t = A[i] - t;
		if (i < B.size()) t -= B[i];
		
		/*
		if (t >= 0) C.push_back(t);
		else C.push_back(t + 10);
		*/
		C.push_back((t + 10) % 10);
		
		if(t < 0) t = 1; // 向前借位
		else t = 0; 
	}
	/*
	for(int i = C.size() - 1; i >= 1; i --) {
		if (C[i] == 0) C.pop_back();
		else break;
	}*/
	while(C.size() > 1 && C.back() == 0) C.pop_back();
	return C;
}

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

因篇幅问题不能全部显示,请点此查看更多更全内容

热门图文

Top