c++ - 将表示为链表的两个大数相乘
问题描述
我试图将表示为链接 lilsts 的 2 个大数相乘(重载运算符 *),但似乎有一个错误。有谁能帮帮我吗?我认为乘法函数是正确的,因为我已经对其进行了测试。但是当我尝试重载运算符时,我似乎无法指出出了什么问题*.....我尝试循环遍历一个列表并将每个节点与另一个节点相乘..额外的除法技巧2个大数?谢谢你!这是我的代码:
Numar *Numar :: operator* (Numar *nr2) //overloading operator*
{
Lista *L = new Lista;
Numar *rezultat = new Numar(L);//links the list to the number
Lista *aux = new Lista;
Numar *rez2 = new Numar(aux); //an auxiliary
int t = 1;
Nod *p2 = this->L->prim; //1st node of this
while (p2) //loop the 2nd number
{
rez2 = nr2->multiply(p2->info * t); //multiply the 1st list with an int
cout<<"rez2 "<<rez2;
rezultat = *rezultat + rez2;
cout<<"rezultat "<<rezultat;
t *= 10; //that carry
p2 = p2->next;
}
return rezultat;
}
解决方案
问题是这个定义不适用于你打算做的事情。
Numar *Numar :: operator* (Numar *nr2)
如果要定义类型Numar
并重载算术运算符,则需要处理值(最终是 const 或 rvalue 引用)而不是指针。否则,一旦进行一些临时计算,您就会泄漏内存。
所以你需要修改你的代码设计,这样你最终会得到以下签名:
Numar Numar :: operator* (Numar nr2)
为此,Numar
需要Lista
实施规则 3。
编辑:为了避免在不需要时复制值,您可能希望 - 正如评论中的1201programalarm所建议的那样- 去:
Numar Numar :: operator* (const Numar& nr2)
但这可能需要在定义您在 nr2 上调用的成员函数时考虑到 const.
推荐阅读
- python - 如果它们是 Python 中的文本,如何解决数据框中丢失的数据代码?
- scala - 使用 ReactiveMongo 更新 GridFS 文件
- android - 尽管更改了动画,为什么它仍然使用淡入/淡出动画?
- elasticsearch - 如何在logstash的.conf文件中创建多个索引
- reactjs - 在 useEffect 内的调度中使用组件作为道具会产生无限调度吗?
- json - 未捕获的类型错误:将循环结构转换为 JSON --> 从具有构造函数“FiberNode”的对象开始
- c# - 即使属性是绑定也不会更新
- apache-kafka - 在 kafka-connect 中使用 jdbc 源连接器时面临数据丢失问题
- javascript - 当监视从另一个类(Node.js)调用的对象时,Jest mockImplementation(Promise.resolve)返回未定义
- c# - 唯一的 IdentityColumn 值取决于另一列