Умножьте два больших числа, представленных в виде связанных списков - PullRequest
1 голос
/ 16 марта 2019

Я попытался умножить 2 больших числа, представленных в виде связанных строк (перегрузить оператор *), но, похоже, произошла ошибка.кто-нибудь из вас может мне помочь, пожалуйста?Я думаю, что функция умножения верна, так как я проверил ее.но я не могу понять, что не так, когда я пытаюсь перегрузить оператор * ..... я пытался перебирать один список и перебирать каждый узел из другого .. extra совет для деления 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

1 Ответ

1 голос
/ 16 марта 2019

Проблема в том, что это определение не будет работать для того, что вы собираетесь делать;

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

Если вы хотите определить тип Numar и арифметических операторов перегрузки , вам нужно работать со значениями (в конце концов, ссылками на константы или значения), а не с указателями. В противном случае вы потеряете память, как только у вас будут временные вычисления.

Итак, вам нужно пересмотреть дизайн кода, чтобы в итоге вы получили следующую подпись:

Numar Numar :: operator* (Numar nr2) 

Чтобы это работало, Numar и Lista необходимо реализовать правило 3 .

Редактировать: Во избежание копирования значений, когда в этом нет необходимости, вы можете - в соответствии с предложением 1201programalarm в комментариях - перейти к:

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

Но для этого может потребоваться некоторая дисциплина в определении функций-членов, которые вы вызываете в nr2 с учетом констант.

...