高精度加法,相当于a+b problem,不用考虑负数.
分两行输入。\(a,b \leq 10^{500}\)
输出只有一行,代表\(a+b\)的值
1 1
2
1001 9099
10100
#include<iostream> #include<vector> #include<algorithm> using namespace std; //C=A+B,A>=0,B>=0 vector<int> add(vector<int> &A,vector<int> &B) { vector<int> C; if(A.size()<B.size())return add(B,A); int t=0; for(int i=0;i<A.size();i++) { t+=A[i]; if(i<B.size())t+=B[i]; C.push_back(t%10); t/=10; } if(t)C.push_back(t); return C; } vector<int> A,B,C; string a,b; int main() { cin>>a>>b; for(int i=a.size()-1;~i;i--) A.push_back(a[i]-'0'); for(int i=b.size()-1;~i;i--) B.push_back(b[i]-'0'); C=add(A,B); for(int i=C.size()-1;~i;i--) printf("%d",C[i]); return 0; }
高精度减法。
两个整数 \(a,b\)(第二个可能比第一个大)。
结果(是负数要输出负号)。
2 1
1
#include<iostream> #include<vector> #include<algorithm> using namespace std; //C=A-B,满足A>=B,A>=0,B>=0 vector<int> sub(vector<int> &A,vector<int> &B) { vector<int> C; for(int i=0,t=0;i<A.size();i++) { t=A[i]-t; if(i<B.size())t-=B[i]; C.push_back((t+10)%10); t=t<0?1:0; } while(C.size()>1&&C.back()==0)C.pop_back(); return C; } vector<int> A,B,C; string a,b; int main() { cin>>a>>b; if(a.size()<b.size()||(a.size()==b.size()&&a<b))putchar('-'),swap(a,b); for(int i=a.size()-1;~i;i--) A.push_back(a[i]-'0'); for(int i=b.size()-1;~i;i--) B.push_back(b[i]-'0'); C=sub(A,B); for(int i=C.size()-1;~i;i--) printf("%d",C[i]); return 0; }