1.高精度加法
这个比较简单一些,主要是考虑满10进位的问题,直接写代码就可以。(若数字很大的话,不太好运算,所以将数字转化成字符串的形式输入)
#include <iostream> using namespace std; const int N = 100010; int A[N], B[N], C[N]; int Add(int a[], int b[], int c[], int cnt) { int t = 0;//t表示进位 for (int i=1; i<=cnt; i++) { t += a[i] + b[i];//进位加上a和b第i位上的数 c[i] = t % 10;//c的值就是进位的个位数 t /= 10;//把t的个位数去掉只剩下十位数,即只剩下这个位置的进位 } if (t) c[++cnt] = 1;//如果t==1,表示还有一个进位,要补上 return cnt; } int main() { string a, b; cin >> a >> b; //A和B倒着放进int数组,因为有进位,倒着放容易处理 int cnt1 = 0; for (int i=a.size()-1; i>=0; i--) A[++cnt1] = a[i] - '0'; int cnt2 = 0; for (int i=b.size()-1; i>=0; i--) B[++cnt2] = b[i] - '0'; int tot = Add(A, B, C, max(cnt1, cnt2)); //因为A和B是倒着放的,所以C也要倒着输出 for (int i=tot; i>=1; i--) cout << C[i]; }
2.高精度减法
(时间复杂度为O(n)),
和高精度加法差不多,值得注意的是①减法的借位处理②相减为负数的处理③前导0的处理
//高精度加法是一样的。
标签:高精度,int,--,算法,cnt2,cnt1,加法 From: https://www.cnblogs.com/zhaorubing/p/17763291.html