A01 高精度算法 加法_哔哩哔哩_bilibili
P1601 A+B Problem(高精) - 洛谷
// 高精度 O(n)
#include<bits/stdc++.h>
using namespace std;
void add(string sa,string sb){
int la=sa.size(),lb=sb.size(),m=max(la,lb);
vector<int> a(m+1,0),b(m+1,0),c(m+1,0);
for(int i=0; i<la; i++) a[i]=sa[la-1-i]-'0';
for(int i=0; i<lb; i++) b[i]=sb[lb-1-i]-'0';
for(int i=0; i<m; i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(!c[m] && m) m--; //去除前导零
for(int i=m; i>=0; i--) printf("%d",c[i]);
}
int main(){
string a,b; cin>>a>>b;
add(a,b);
return 0;
}
// 高精度 O(n)
#include<bits/stdc++.h>
using namespace std;
struct HP{
string s;
HP(string x="0"):s(x){}; //构造
const HP operator+(const HP &t){ //重载+
string sa=s,sb=t.s,res;
int la=sa.size(),lb=sb.size(),m=max(la,lb);
vector<int> a(m+1,0),b(m+1,0),c(m+1,0);
for(int i=0; i<la; i++) a[i]=sa[la-1-i]-'0';
for(int i=0; i<lb; i++) b[i]=sb[lb-1-i]-'0';
for(int i=0; i<m; i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
while(!c[m] && m) m--; //去除前导零
for(int i=m; i>=0; i--) res+=char(c[i]+'0');
return HP(res);
}
friend istream& operator>>(istream &in,HP &t){ //重载>>
in>>t.s;
return in;
}
friend ostream& operator<<(ostream &out,const HP &t){ //重载<<
out<<t.s;
return out;
}
};
int main(){
HP a,b; cin>>a>>b;
cout<<a+b;
return 0;
}