> 文档中心 > 【Day1】数组形式的整数加法

【Day1】数组形式的整数加法


实现思路

实际上就是一个模拟人工加法的过程

复杂度分析

  1. 时间复杂度:O(n)
  2. 空间复杂度:O(n)

代码实现

class Solution {    public List<Integer> addToArrayForm(int[] num, int k) { int n = num.length; List<Integer> ans = new ArrayList<>(); num[n-1] += k; int t  = 0;// 用 t 来表示进位  for(int i = n - 1; i >=0 ; i--) {     // 比如说 now = 11, ans 的当前位就是 1,进位为 10     int now = num[i] + t; // 当前位 + 进位之后的结果     ans.add(now % 10);// ans 中当前位的结果是 now 的个位     t = now / 10; // 进位就是 除了个位 以上的为 } if(t > 0){     while(t != 0) {  ans.add(t % 10);  t /= 10;     } } Collections.reverse(ans);  return ans;    }}

高精度加法
Acwing

给定两个正整数(不含前导 0),计算它们的和。 # 输入格式 共两行,每行包含一个整数。 # 输出格式共一行,包含所求的和。# 数据范围1≤ 整数长度 ≤100000
#include#include#include using namespace std;vector<int> add(vector<int> A,vector<int> B) {    if(A.size() < B.size()) return add(B,A);    vector<int> C;    int t = 0;// 表示进位    for(int i = 0 ;i < A.size(); i++) { t += A[i]; if(i < B.size()) t+= B[i]; C.push_back(t % 10); t /= 10;    }    if(t > 0) { while(t !=0 ) C.push_back(t % 10), t/=10;    }    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);    for(int i = C.size() - 1; i >= 0; i--){ cout<<C[i];    }    return 0;    }

粉色屋