高精度减法
作者:互联网
#include<iostream> #include<vector> using namespace std; bool cmp(vector<int> &A,vector<int> &B){ if(A.size()!=B.size()) return A.size()>B.size();//如果A,B元素个数不同,如果关系表达式为真,A>B为true for(int i=A.size()-1;i>=0;i--)//A,B元素个数相同 if(A[i]!=B[i]) return A[i]>B[i];//从最高位开始比较,如果相等就继续向下比较 return true;//A和B相等 } vector<int> sub(vector<int> &A,vector<int> &B){ vector<int> C; int t=0;//借位初始化为0 for(int i=0;i<A.size();i++){ t=A[i]-t;//减数先减去上一位的借数 if(i<B.size()) t-=B[i];//如果B在这一位有数,则减去 C.push_back((t+10)%10);//如果差是正数,则+10和%10抵消;如果差是负数,则先加上借来的10,再%10 if(t<0) t=1;//这一位向更高一位的借数(下一次循环) else t=0; } while(C.size()>1&&C.back()==0) C.pop_back();//这样减的例子:123-100=003,这步操作是为了消去前面的0 return C; } int main(){ string a,b; cin>>a>>b; vector<int>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'); if(cmp(A,B)){//先判断A和B谁大,再确定如何调用函数和输出 auto C=sub(A,B); for(int i=C.size()-1;i>=0;i--) cout<<C[i]; } else{ auto C=sub(B,A); cout<<"-"; for(int i=C.size()-1;i>=0;i--) cout<<C[i]; } return 0; }
标签:return,高精度,int,back,--,vector,减法,size 来源: https://www.cnblogs.com/z218/p/15832236.html