高精减
树图思维导图提供 高精减 在线思维导图免费制作,点击“编辑”按钮,可对 高精减 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:36af8b0bec9052a0fbfebf2d386f3795
高精减思维导图模板大纲
判断A与B的大小,如果A比B小,那就用B-A的结果再加一个负号(毕竟用的是vector,不是int)
第i位上的值是A[i]-b[i]-t
进位的t就看i-1位的结果,如果A[i-1]-B[i-1]-t>=0 则t=0,否则 t=1
记得去掉前缀0
#include<bits/stdc++.h> using namespace std; bool cpr(vector<int> &A,vector<int> &B){ if(A.size()!=B.size()) return A.size()>B.size(); else for(int i=0;i<A.size();i++) if(A[i]!=B[i]) return A[i]>B[i]; return 1; } vector<int> add(vector<int> A,vector<int> B){ vector<int> C; int t=0; for(int i=0;i<A.size();i++){ t=A[i]-t; if(i<B.size()) t-=B[i]; C.push_back((t+10)%10); if(t<0) t=1; else t=0; } return C; } int main(){ vector<int> A,B,C; string a,b; getline(cin,a); getline(cin,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'); while(A.back()==0&&A.size()>1) A.pop_back(); while(B.back()==0&&B.size()>1) B.pop_back(); if(cpr(A,B)) C=add(A,B); else{ cout<<'-'; C=add(B,A); } while(C.back()==0&&C.size()>1) C.pop_back(); for(int i=C.size()-1;i>=0;i--) cout<<C[i]; return 0; }