概念
当学完C++语言部分的知识后,可以学习一下高精度习题,锻炼一下自己对一维数组的理解,提高自己的代码能力。相信我,如果你不是抄代码的,你将写得怀疑人生。(这个地方写的时候,真的挺容易写错)
主要的思想是利用竖式加减乘除的原理,进行模拟。这块一般是背模板理解,有用string读入转vector的,有直接用一维数组处理的。在理解原理上,vector的模板好理解。在实际使用中,一维数组的使用更加常见。
现在的考试基本不单纯考高精度,很早之前省选有一次考的高精除法,结果只有很少人写对,然而题目区分度却被diss。现在都基本开LL过部分分,或者会取模,避免高精。普及组里如果遇到高精度,可能现场也不太会写高精,需要比较强的代码能力。
高精度加法
// C = A + B, A >= 0, B >= 0vector<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) C.push_back(t);return C;}
//一维数组版本void add(int A[], int B[], int C[]){int t = 0;for (int i = 0; i <= lena || i <= lenb; i++){if (i <= lena) t += A[i];if (i <= lenb) t += B[i];C[lenc++] = t % 10;t /= 10;}if (t) C[lenc] = 1;while (lenc > 0 && C[lenc] == 0) lenc--;for (int i = lenc; i >= 0; i--) cout << C[i];puts("");}
例题:1168:大整数加法
// 1.使用vector<> 的模板实现,读入string后,要倒序处理一下// 2.使用一维数组的方式实现// 输入的数据,可能有多余的前导零
