【Day1】数组形式的整数加法
实现思路
实际上就是一个模拟人工加法的过程
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度: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; }