繁体   English   中英

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

[英]Multiply two large numbers represented as linked lists

我尝试将 2 个表示为链接 lilsts 的大数相乘(重载运算符 *),但似乎有错误。 你们中的任何人都可以帮助我吗? 我认为乘法函数是正确的,因为我已经测试过了。 但我似乎无法把手指放在什么是错的,当我试图通过一个列表,并mutiply从另一个每个节点超负荷运营商* .....我试过循环..额外的分小费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;
}

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

问题是这个定义不适用于你打算做的事情;

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

如果要定义类型Numar重载算术运算符,则需要处理值(最终是 const 或右值引用)而不是指针。 否则,一旦进行一些临时计算,就会泄漏内存。

所以你需要修改你的代码设计,这样你最终会得到以下签名:

Numar Numar :: operator* (Numar nr2) 

为此, NumarLista需要实现3规则

编辑:为了避免在不需要时复制值,您可能希望 - 正如评论中的1201programalarm所建议的那样- 去:

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

但是,鉴于 const,这可能需要在定义您在 nr2 上调用的成员函数时进行一些纪律处分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM