高精度加法
#include <cmath> #include <vector> #include <algorithm> #include <bits/stdc++.h> using namespace std; bool cmp(string &s, string &t){ if(s.size()!=t.size())return s.size()>t.size(); for(int i=0;i<s.size();i++){ if(s[i]!=t[i]) return s[i]>t[i]; } return true; } vector<int> sub(string &s, string &t){ vector<int>c; vector<int>a,b; for(int i=s.size()-1;i>=0;i--)a.push_back(s[i]-'0'); for(int i=t.size()-1;i>=0;i--)b.push_back(t[i]-'0'); 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); if(t<0)t=1; else t=0; } while(c.size()>1&&c.back()==0)c.pop_back(); return c; } vector<int> add(string &s, string &t){ vector<int>a,b; for(int i=s.size()-1;i>=0;i--)a.push_back(s[i]-'0'); for(int i=t.size()-1;i>=0;i--)b.push_back(t[i]-'0'); vector<int>c; int k=0; for(int i=0;i<a.size()||i<b.size();i++){ if(i<a.size())k+=a[i]; if(i<b.size())k+=b[i]; c.push_back(k%10); k/=10; } if(k)c.push_back(1); return c; } int main() { string s, t; cin>>s>>t; if(s.size()<=10001||t.size()<=10001){ if(s[0]!='-'&&t[0]!='-'){ auto res=add(s,t); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; }else if(s[0]=='-'&&t[0]=='-'){ s=s.substr(1),t=t.substr(1); auto res=add(s,t); cout<<'-'; for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; }else if(s[0]=='-'&&t[0]!='-'){ s=s.substr(1); if(cmp(s,t)){ cout<<'-'; auto res=sub(s,t); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; }else{ auto res=sub(t,s); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; } }else if(s[0]!='-'&&t[0]=='-'){ t=t.substr(1); if(cmp(s,t)){ auto res=sub(s,t); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; }else{ cout<<'-'; auto res=sub(t,s); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; } }else if(s[0]=='0'&&t[0]=='0'){ cout<<'0'<<endl; } } return 0; }