大三下每日打卡034

791.高精度加法

其实就算模拟竖式加法的过程,把两个很长的数都存数组里,一般反过来存,个位存第一位,然后对齐之后分别两两相加,设置一个判断为t,t=1代表有进位,t=0代表没进位,同时判断一下上下还有没有数,没数就是+0,

给定两个正整数(不含前导 00),计算它们的和。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的和。

数据范围

1≤整数长度≤1000001≤整数长度≤100000

输入样例:

12
23

输出样例:

35
#include<bits/stdc++.h>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A, vector<int> &B)
{
   vector<int> C;
   int t = 0;
   for(int i =0 ;i < A.size() || i < B.size(); i++ )
  {
       if(i<A.size()) t += A[i];  //如果A数组没加完,没超过A的范围 此时t=Ai+Bi+上一次的进位
       if(i<B.size()) t += B[i];  //如果B数组没加完
       C.push_back(t % 10);      //当前的数,往C里插入的是求余后的余数
       t /= 10;  //判断是否进位,t<10 t/10=0,   10<t<20   t/10=1
  }
   if(t) C.push_back(1);
   return C;
   
}
int main()
{
  string a,b;
  vector<int>A,B;
  cin>>a>>b;
  for(int i = a.size() -1;i>=0;i--) A.push_back(a[i] - '0');
  for(int i = b.size() -1;i>=0;i--) B.push_back(b[i] - '0');
  auto C = add(A,B);   //auto是自动类型推导
  for(int i = C.size()-1; i>=0; i--)printf("%d",C[i]);  
}
 
posted @ 2025-04-12 10:42  软件拓荒人  阅读(9)  评论(0)    收藏  举报