A01 高精度加法

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;
}

 

posted @ 2022-09-02 23:02  董晓  阅读(1548)  评论(0)    收藏  举报