C++ 将表示为数组的整数相乘
我试图构建一个类bigint,它表示数组中的大数字,但是我在创建一个将这个bigint与另一个bigint相乘的C++ 将表示为数组的整数相乘,c++,arrays,class,endianness,multiplication,C++,Arrays,Class,Endianness,Multiplication,我试图构建一个类bigint,它表示数组中的大数字,但是我在创建一个将这个bigint与另一个bigint相乘的*=成员函数时遇到了问题。我知道已经有一些课程可以做到这一点,但我正在尝试建立自己的课程作为学习练习 biguint的数字存储在数组std::size\u t data[CAPACITY]中,最低有效位存储在data[0]中,最高有效位存储在data[CAPACITY-1]中(小端)。例如,如果容量=5,则12345将表示为数据[0]=5,数据[1]=4,数据[2]=3,数据[3]=2
*=
成员函数时遇到了问题。我知道已经有一些课程可以做到这一点,但我正在尝试建立自己的课程作为学习练习
biguint的数字存储在数组std::size\u t data[CAPACITY]
中,最低有效位存储在data[0]
中,最高有效位存储在data[CAPACITY-1]
中(小端)。例如,如果容量=5
,则12345将表示为数据[0]=5,数据[1]=4,数据[2]=3,数据[3]=2,数据[4]=1
我已经成功地构建了构造函数、加法函数、大小函数、
操作符函数和[]
操作符函数。例如,下面的代码可以工作
int main()
{
biguint b(423);
biguint c(2363);
b += c;
cout << b << endl;
cout << b.size() << endl;
return 0;
}
关于乘法问题,这是我提出的最接近的函数。它可以正确地计算像400*2这样的大整数,但在像400*20这样的大整数时失败,因为它重写了数据[i]
void bigint::operator *= (const bigint &n)
{
int carryover = 0;
for (size_t i=0; i < size(); ++i)
{
for (size_t j=0; j < n.size(); ++j)
{
std::cout << data[i] << "*" << n[j] << "=";
data[i] *= n[j];
std::cout << data[i] << std::endl;
}
}
}
我认为正确的方法是创建一个新的bigint,但当我尝试这样的操作时,我得到了一个错误,赋值的左操作数需要左值:
109
* 12
____
218
+1090
_____
1308
void bigint::operator *= (const biguint &n)
{
int carryover = 0;
bigint ans(0);
for (size_t i=0; i < size(); ++i)
{
for (size_t j=0; j < n.size(); ++j)
{
ans[j] += data[i] * n[i];
ans[j] += carryover;
carryover = ans[j] / 10;
ans[j] = ans[j] % 10;
}
}
}
我解决了这个问题,但速度慢,效率低。我只是把第一个数字加上第二个数字。我的语法有点奇怪,因为我还没有编写或+++
运算符。我现在将坚持使用这个实现,因为它是我现在唯一可以工作的实现
void biguint::operator *= (const biguint &n)
{
biguint temp(*this);
biguint i(1);
biguint one(1);
while (i.compare(n) != 0)
{
*this += temp;
i += one;
}
}
我认为您应该先尝试重载*
操作符
void bigint::operator += (const biguint &n)
{
int carryover = 0;
for (size_t i=0; i < CAPACITY; ++i)
{
data[i] += n[i];
data[i] += carryover;
carryover = data[i] / 10;
data[i] = data[i] % 10;
}
}
void biguint::operator *= (const biguint &n)
{
biguint temp(*this);
biguint i(1);
biguint one(1);
while (i.compare(n) != 0)
{
*this += temp;
i += one;
}
}