利用vector与重载运算符实现大整数减法
#include#include #include using namespace std; vector a,b; // 存储大整数,高位存储在高位 //重载-同时满足大整数与大整数、与整数的减法 //大整数-大整数, 一定是大数-小数,1、长度不同,b比a长,则添加负号再交换a和b;2、长度相同,则按位比较。 vector operator -(vector a, vector b){ vector ans; //记录输出结果 if(a.size() < b.size()){ // a < b, 输出负号并交换 cout <<"-"; swap(a,b); } // a与b长度一致,从高位开始比较,任一位小于b则输出负号并交换 else if(a.size() == b.size()){ for(int i = a.size() - 1; i >= 0; --i) if(a[i] < b[i]){ cout<<"-"; swap(a,b); break; } } int temp = 0; //表示当前结果 for(int i = 0; i < b.size(); ++i){ temp = a[i] - b[i]; if(temp < 0){ //不够减时,借位 a[i + 1]--; temp += 10; } ans.push_back(temp); } //相减不存在最高位进位问题 //由于a中始终存储较大、较长的数,故可能要将a中剩余位数放入ans for(int i = ans.size(); i < a.size(); ++i) ans.push_back(a[i]); //消除先导0,且i>0即遇到ans = 000……0的情况,保留一位,答案输出0 for(int i = ans.size() - 1; ans[i] == 0 && i >0; --i) ans.pop_back(); return ans; } int main(){ vector a = {5,7,6,5}, b = {9,7,8,8},ans; ans = a - b; for(int i = ans.size() - 1; i >= 0; --i) cout << ans[i]; return 0; }



