本人水平有限,如有指点,欢迎点评。
高精度减法
bool cmp(vector<int> &A,vector<int> &B)
{
// 清晰分类 A.size() != B.size()
if(A.size() != B.size()) return A.size() > B.size(); // 巧妙 在于统一 A > B
// 然后 A.size() = B.size()
for(int i = A.size() - 1;i >= 0;i--) // 从 最高位 开始比较
if(A[i] != B[i])
return A[i] > B[i]; // 统一 A > B
return true;
}
void sub(vector<int> &A,vector<int> &B)
{
int t = 0;
for(int i = 0;i < A.size();i++)
{
t = A[i] - t;
if(i < B.size()) t -= B[i];
C.push_back((t + 10) % 10);
if(t < 0) t = 1;
else t = 0;
}
// 去除前导0
while(C.size() > 1 && C.back() == 0) C.pop_back();
}
if(cmp(A,B)) sub(A,B);
else sub(B,A),cout << '-';
高精度除法
void div(vector<int> &A,int b)
{
int t = 0;
for(int i = A.size() - 1;i >= 0;i--)
{
t = t * 10 + A[i];
C.push_back(t / b);
t %= b;
}
while(C.size() > 1 && C.back() == 0) C.pop_back();
// 最后剩余的 t 即为余数
}
高精度统一 倒序 存入vector, 倒序输出
for(int i = a.size() - 1;i >= 0;i--) A.push_back(a[i] - '0');
for(int i = C.size() - 1;i >= 0;i--) cout << C[i];
点赞随意 欢迎评论