高精度减法

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6+50;

int arr[M],brr[M],crr[M];

double n;
string s1,s2;
int check(string s1,string s2){
	int cd1 = s1.size();
	int cd2 = s2.size();
	if( cd1!=cd2 ) return cd1>cd2;
    for( int i = cd1-1 ; i >= 0 ; i-- ){
        if(s1[i]!=s2[i]){
            return 	s1[i]>s2[i];			
        } 
    }
    return 2; 
}
int flag=0;
void minuss(string s1,string s2){
	if(check(s1,s2)==0){
		flag=1;
		swap(s1,s2);
	}
	int cd1=s1.size();
	int cd2=s2.size();
	
	reverse(s1.begin(),s1.end()); 
	reverse(s2.begin(),s2.end());
	
	for(int i=0;i<cd1;i++) arr[i]=s1[i]-'0';
	for(int i=0;i<cd2;i++) brr[i]=s2[i]-'0';
	
	int cd3 = max(cd1,cd2);
	
//	for(int i=0;i<cd1;i++) cout<<arr[i]<<" ";
//	cout<<endl;
//	for(int i=0;i<cd2;i++) cout<<brr[i]<<" ";
//	cout<<endl;
	
	for(int i=0;i<cd3;i++){
		//cout<<arr[i]<<" "<<brr[i]<<endl; 
		if(arr[i]<brr[i]) arr[i]+=10,arr[i+1]--;
		crr[i]=arr[i]-brr[i];
	}
	reverse(crr,crr+cd3);
	int i = 0;
	while(crr[i]==0 && i<cd3-1)i++;
	
	if(flag==1) cout<<"-";
	for(;i<cd3;i++)cout<<crr[i];
	
}
int main(){
	cin>>s1>>s2;
	minuss(s1,s2);
	return 0;
}
posted @ 2022-10-22 20:47  程易。  阅读(31)  评论(0)    收藏  举报