#include<iostream>#include<algorithm>#include<string>#include<vector>usingnamespace std;
vector<int>add(vector<int>& n1, vector<int>& n2){if(n1.size()< n2.size())returnadd(n2, n1);// 这样可以使n1>n2reverse(n1.begin(), n1.end());// 倒置n1和n2这样如果最后一位进位就直接在最后+1// 不用覆盖了reverse(n2.begin(), n2.end());
vector<int> res;int t =0;for(int i =0; i < n1.size(); i ++){int num = t + n1[i];if(i < n2.size())
num += n2[i];
t = num /10;
res.push_back(num %10);}if(t) res.push_back(t);// 如果最后一位还有进位,//记得要将最后一位1加到res的最后,然后反转整个resreverse(res.begin(), res.end());return res;}intmain(){
string str1, str2;
cin >> str1 >> str2;
vector<int> num1, num2;for(int i =0; i < str1.size(); i ++)
num1.push_back(str1[i]-'0');for(int i =0; i < str2.size(); i ++)
num2.push_back(str2[i]-'0');
vector<int> res =add(num1, num2);for(auto n : res)
cout << n;return0;}
高精度减法
#include<iostream>#include<algorithm>#include<string>#include<vector>usingnamespace std;intcmp_num(vector<int>& num1, vector<int>& num2){if(num1.size()!= num2.size())return num1.size()>= num2.size();for(int i = num1.size()-1; i >=0; i --)if(num1[i]!= num2[i])return num1[i]>= num2[i];return1;}
vector<int>Sub(vector<int>& n1, vector<int>& n2){
vector<int> res;int t =0;for(int i =0; i < n1.size(); i ++){int num = n1[i]- t;if(i < n2.size())
num -= n2[i];if(num <0)// 判断是否要借位{
t =1;
res.push_back(num +10);}else{
t =0;
res.push_back(num);}}while(res.size()>1&& res.back()==0) res.pop_back();// 去掉前导0return res;}int main (){
string num1, num2;
cin >> num1 >> num2;//将数字逆置放在数组中
vector<int> A, B;for(int i = num1.size()-1; i >=0; i --)
A.push_back(num1[i]-'0');for(int i = num2.size()-1; i >=0; i --)
B.push_back(num2[i]-'0');
vector<int> C;//答案数组//分情况讨论A,B的大小if(cmp_num(A, B))//A数大{
C =Sub(A, B);}else//B数大{
C =Sub(B, A);
cout <<"-";}reverse(C.begin(), C.end());for(auto n : C)
cout << n;return0;}