Hello

I have a task to perform an addition of 2 Big Integers. Each Big Integer is stored in a linked list in reversed order. Is my add function correct?

For eg;
we have 2 Big Ints to add together

First BigInt = 245 { strored in the linked list as 5 - 4 - 2 }
2nd BigInt = 23 { strored in the linked list as 3 - 2 }

``````bigInt bigInt::add(bigInt J)
{
// Write this function correctly.
// You could simply insert an appropriate loop
// where indicated below.
int i, j, k, s;
int carry = 0;
node * currentp = firstp;
node * currentJp = J.firstp;
node * result;
makeEmpty(result);

// Insert an appropriate loop here.
// Build up result using comp.

while (currentp != NULL) {

i = currentp->data + currentJp->data + carry;
if (i>=10) {
carry = 1;
i = i%10;
}
else carry = 0;

result = comp(result,i);
currentp = currentp->next;
currentJp = currentJp->next;
}

invert(result); // result needs to be inverted to obtain correct order of digits.
bigInt K(result);
return K;
}``````

Whole source code:

``````#include "bigInt.h"
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

// Definition of node
struct node
{
int data;
node * next;
};

/* Member functions of the class bigInt

node * comp(node * L, int x); // returns composition of L and x
// (i.e. the list obtained by inserting a new node containing x
// at the head of L)

class bigInt
{
public:

private:
node * firstp;
};
*/

{
// Write this function correctly.
// You could simply insert an appropriate loop
// where indicated below.
int i, j, k, s;
int carry = 0;
node * currentp = firstp;
node * currentJp = J.firstp;
node * result;
makeEmpty(result);

// Insert an appropriate loop here.
// Build up result using comp.

while (currentp != NULL) {

i = currentp->data + currentJp->data + carry;
if (i>=10) {
carry = 1;
i = i%10;
}
else carry = 0;

result = comp(result,i);
currentp = currentp->next;
currentJp = currentJp->next;
}

invert(result); // result needs to be inverted to obtain correct order of digits.
bigInt K(result);
return K;
}

node * comp(node * L, int x)
{
node *newp = new node;
newp->data = x;
newp->next = L;

return newp;
}``````

My lecturer gave us half of the function 'add' already done but I haven't used all of the variables in the template. Why did they give us so many variables??

Template given by lecturer:

``````bigInt bigInt::add(bigInt J)
{
// Write this function correctly.
// You could simply insert an appropriate loop
// where indicated below.
int i, j, k, s;
int carry = 0;
node * currentp = firstp;
node * currentJp = J.firstp;
node * result;
makeEmpty(result);

// Insert an appropriate loop here.
// Build up result using comp.

invert(result); // result needs to be inverted to obtain correct order of digits.
bigInt K(result);
return K;
}``````