下面是高精度除法的函数。
具体实现为:从高位到低位遍历A中每一位,将该位与上一轮的余数r组成新的被除数,并计算出商并更新余数r。最后反转得到商C,并去除C末尾多余的0(如果有)。
注意这里假设A和b都是非负整数,并且A已经按照从高到低的顺序排列。如果需要支持负数或者无序数组,则需要进行额外处理。
// A / b = C ... r, A >= 0, b > 0
vector<int> div(vector<int> &A, int b, int &r)
{
vector<int> C; // 定义一个vector类型的变量C,用于存储商
r = 0; // 初始化余数为0
for (int i = A.size() - 1; i >= 0; i -- ) // 从A的最高位开始遍历每一位数字
{
r = r * 10 + A[i]; // 将余数乘以10再加上当前位数字,得到新的被除数
C.push_back(r / b); // 将新的被除数除以b得到商,并将其添加到C中
r %= b; // 更新余数为新的被除数对b取模的结果
}
reverse(C.begin(), C.end()); // 翻转C中元素的顺序,使其表示正确的十进制数字形式
while (C.size() > 1 && C.back() == 0) C.pop_back(); // 去掉前导0(如果有)
return C; // 返回计算出来的商C
}
这是高精度加法吧
改过了