HugeInt的除法运算符过载
Overloaded division operator for HugeInt
可能的重复:
具有大数字的除法
我需要重载/运算符来处理两个HugeInt对象,这两个对象被简单地定义为30个short的数组。顺便说一句,这是家庭作业,但我已经为这个问题绞尽脑汁好几天了。
我已经超载了*操作员:
HugeInt HugeInt::operator*(const HugeInt &op2){
HugeInt temp;
short placeProducts[hugeIntSize + 1][hugeIntSize] = {0};
short product;
int carry = 0;
int k, leftSize, rightSize, numOfSumRows;
leftSize = getDigitLength();
rightSize = op2.getDigitLength();
if(leftSize <= rightSize) {
numOfSumRows = leftSize;
for(int i = (hugeIntSize - 1), k = 0; k < numOfSumRows; i--, k++) {
for(int j = (hugeIntSize - 1); j >= k; j--) {
product = integer[i] * op2.integer[j] + carry;
if (product > 9) {
carry = product / 10;
product %= 10;
} else {
carry = 0;
}
placeProducts[k][j - k] = product;
}
}
} else {
numOfSumRows = rightSize;
for(int i = (hugeIntSize - 1), k = 0; k < numOfSumRows; i--, k++) {
for(int j = (hugeIntSize - 1); j >= k; j--) {
product = integer[j] * op2.integer[i] + carry;
if (product > 9) {
carry = product / 10;
product %= 10;
} else {
carry = 0;
}
placeProducts[k][j - k] = product;
}
}
}
sumProductsArray(placeProducts, numOfSumRows);
for(int i = 0; i < hugeIntSize; i++)
{
temp.integer[i] = placeProducts[hugeIntSize][i];
}
return temp;}
但是如何使/op过载呢?我的主要问题不在于C++代码或语法,而在于我的除法算法。当我相乘的时候,我可以一个数字一个数字地做。我使用进位算法将每个乘积(也就是底部的1位数乘以上面的每个数字,然后是上面的每个num的10位数)存储在我的2d数组中。每次我得到新的乘积,它都会向左偏移n+1,这将它"乘以"所需的10次方。然后我把所有的列加起来。
我一辈子都想不出如何对长除法进行编码。由于我处理的是两个数组,所以它必须是一个数字接一个数字的,我怀疑这可能和反转乘法算法一样容易。嵌套循环和减法?我需要一个变量作为商和提醒?有更好的方法吗?我只需要被指向正确的方向。
在整数的计算除法中,有几个有趣的结果:
- 分子<分母表示商=0
- 分子==分母表示商=1
- 分子>分母,则需要进行长除法来确定商
前两个条件可以用for循环来满足。您可以重载小于等于关系运算符来封装此行为。
对于长除法,您需要乘法运算符、重载的小于运算符和减法运算符,以及一个附加数字成员函数来执行运算。
这是蛮力,但应该完成任务。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 不使用算术运算符的除法
- 用于 3D 矢量的高效除法运算符
- C++ Java 除法运算符
- HugeInt的除法运算符过载
- 创建乘积数组,它包含数组中所有元素的乘积,这些元素可以被A[i]整除,而不使用除法运算符
- 不带逻辑运算符的舍入整数除法
- 为什么 std::atomic<integral> 专用化不提供乘法和除法赋值运算符?
- 如果未实现除法运算符,则SFINAE回退
- 乘法、除法和平方根而不使用算术运算符
- 在C中使用移位运算符的乘法和除法实际上更快吗