A01 高精度加法

视频链接:A01 高精度算法 加法_哔哩哔哩_bilibili

 

Luogu P1601 A+B Problem(高精)

#include <iostream>
using namespace std;

const int N=505;
int a[N],b[N],c[N];
int la,lb,lc;

void add(int a[],int b[],int c[]){ //a+b=c
  for(int i=1; i<=lc; i++){
    c[i]+=a[i]+b[i]; //求和
    c[i+1]+=c[i]/10; //进位
    c[i]%=10;        //存余
  }
  if(c[lc+1]) lc++;  //最高位
}
int main(){
  string sa,sb; cin>>sa>>sb;
  la=sa.size(),lb=sb.size(),lc=max(la,lb);
  for(int i=1; i<=la; i++) a[i]=sa[la-i]-'0';
  for(int i=1; i<=lb; i++) b[i]=sb[lb-i]-'0';
  add(a,b,c);
  for(int i=lc; i; i--) printf("%d",c[i]);
  return 0;
}

 

#include <iostream>
#include <vector>
using namespace std;

typedef vector<int> VI;
VI a, b, c;
int la,lb,lc;

void add(VI &a,VI &b,VI &c){
  int t=0;
  for(int i=0; i<lc; i++){
    if(i<la) t+=a[i];
    if(i<lb) t+=b[i];
    c.push_back(t%10); //存余
    t/=10;             //进位
  }
  if(t) c.push_back(t);
}
int main(){
  string sa,sb; cin>>sa>>sb;
  la=sa.size(); lb=sb.size(); lc=max(la,lb);
  for(int i=la-1;~i;i--) a.push_back(sa[i]-'0');
  for(int i=lb-1;~i;i--) b.push_back(sb[i]-'0');
  add(a,b,c);
  for(int i=c.size()-1;~i;i--) printf("%d", c[i]);
  return 0;
}

 

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