写了一上午的 高精度减法!

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

vector<int> mute(vector<int> A,vector<int> B) {
	int t = 0;
	vector<int> C;
	for(int i = 0; i<A.size(); i++) {
		int c;
		c = A[i]-t;
	    t = 0;
		
		if(i<B.size() && B[i]<=c) {   //这里要注意有等号的 
			c = c-B[i];
			t = 0;
		} else if(i<B.size() && B[i]>c) {
			t = 1;
			c = c+t*10-B[i];
		}
		//如果这里c还是负数呢而且B当中已经没有位数了
		if(c<0){
		    t = 1;
		    c = t*10+c;
		}
		

		//C[i] = c;   //C的大小都不知道  怎么用下表运算符呢?这里应该用push_back 
		C.push_back(c);

	}
	
	//去掉最高位为零的情况但是最后一位不能去掉  i=0的时候代表的是最低位的一个数 
	int i = C.size() - 1; 
	while(C.back() == 0 && i) {
		C.pop_back();
		i--;
	}
	
	return C;
}

bool judge(vector<int> A,vector<int> B){
    if(A.size() != B.size()) return A.size()>B.size();
    else{
        for(int i = A.size()-1;i>=0;i--){
            if(A[i] != B[i]) return A[i]>B[i];
        }
    }
    return true;
}
int main(){
    string s1,s2;
    vector<int> A,B;
    vector<int> C;
    cin>>s1>>s2;
    for(int i = s1.size()-1;i>=0;i--) A.push_back(s1[i]-'0');
    for(int i = s2.size()-1;i>=0;i--) B.push_back(s2[i]-'0');
    if(judge(A,B)) 
        {
            C = mute(A,B);
           
        
        }
    else{
        cout<<"-";
        
        C = mute(B,A);
    }
    for(int i = C.size()-1;i>=0;i--) cout<<C[i];
	
    return 0;
}
posted @ 2020-10-16 12:30  secx  阅读(56)  评论(0)    收藏  举报