将两个大数字相乘表示为链表

时间:2019-03-16 11:28:45

标签: c++ list overloading operator-keyword

我尝试将2个大数字相乘表示为链接的lilsts(重载运算符*),但是似乎出现了错误。你们任何一个可以帮助我吗?我认为乘法功能是正确的,因为我已经对其进行了测试。 但是当我尝试使运算符超载时,我似乎无法指责出什么问题* ..... 我尝试遍历一个列表,然后与另一个节点的每个节点进行多态循环。 extra 分割两个大数字的技巧?谢谢!这是我的代码:

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;
}

获取完整代码https://pastebin.com/PcXuM9EL

1 个答案:

答案 0 :(得分:1)

问题在于此定义不适用于您要执行的操作;

Numar *Numar :: operator* (Numar *nr2) 

如果要定义类型Numaroverload arithmetic operators,则需要处理值(最终是const或rvalue引用),而不要处理指针。否则,一旦进行一些临时计算,就会泄漏内存。

因此,您需要修改代码设计,以便最终获得以下签名:

Numar Numar :: operator* (Numar nr2) 

要执行此操作,NumarLista需要实现rule of 3

编辑: :为避免在不必要时复制值,您可能希望(如1201programalarm在评论中所建议的那样)进行以下操作:

Numar Numar :: operator* (const Numar& nr2) 

但是考虑到const,这可能需要对在nr2上调用的成员函数进行定义。