Hi there, I need help with a method called multiplyTwoBigNums() that passes two
ID: 3543990 • Letter: H
Question
Hi there, I need help with a method called multiplyTwoBigNums() that passes two valiues of type ArrayList<Integer> in its parameter. The method should return an ArrayList with the multiplied number stored in it. This is what I got so far:
//I already have a method that checks for the bigger number so just assume that bigger (in the parameter) is the bigger number.
//Note: The numbers passed on bigger and smaller (parameter) are being passed backwards for a better handeling of the operation. For example: 1990, its passed as 0991.
public ArrayList<Integer> multiplyTwoBigNums(ArrayList<Integer> bigger, ArrayList<Integer> smaller){
ArrayList<Integer> multipliedNumber = new ArrayList<Integer>();
int lengthOfBigger = bigger.size();
int lengthOfSmaller = smaller.size();
int difference = lengthOfBigger - lengthOfSmaller;
int zeroAtFrontOfSmallNumber = 0;
if(difference >0 ){
while(zeroAtFrontOfSmallNumber < difference){
smaller.add(smaller.size(), 0);
zeroAtFrontOfSmallNumber++;
}
}
int toBeCarried =0;
Iterator itrNumber1 = bigger.iterator();
for(int i = 0; i<=smaller.size()-1; i--){
while(itrNumber1.hasNext()){
int number1 = ((Integer)itrNumber1.next()).intValue();
int number2 = smaller.get(i);
int multi = (number1 * number2) + toBeCarried;
if(multi > 9){
int remaining = multi % 10;
multipliedNumber.add(remaining);
toBeCarried = multi/10;
}
else{
multipliedNumber.add(multi);
toBeCarried = 0;
}
}
}
if(toBeCarried!=0){
multipliedNumber.add(toBeCarried);
}
return multipliedNumber;
}
so far this only returns the multiplication of the index zero of smaller times the whole bigger number.
for example:
say that the bigger number is: 1998782348 and the smaller number is: 1993
it would only multiply the index of smaller numer: 3, times the whole big number.
Of course, once it gets to multiply each index of the smaller number times the whole big number, I need help to add them up to get a final product.
I need this method done, so please help!
thanks!
Explanation / Answer
Here is modified function giving correct result after adding the each row of results correctly. It is fully tested. Let me know if you face any issues:
public ArrayList<Integer> multiplyTwoBigNums(ArrayList<Integer> bigger, ArrayList<Integer> smaller)
{
ArrayList<Integer> resultNumber = new ArrayList<Integer>();
int toBeCarried = 0;
for(int i = 0; i < smaller.size(); i++)
{
ArrayList<Integer> newNumber = new ArrayList<Integer>();
Iterator<Integer> itrBigNumber = bigger.iterator();
while(itrBigNumber.hasNext())
{
int number1 = itrBigNumber.next();
int number2 = smaller.get(i);
int multi = (number1 * number2) + toBeCarried;
if(multi > 9)
{
int remaining = multi % 10;
newNumber.add(remaining);
toBeCarried = multi / 10;
}
else
{
newNumber.add(0, multi);
toBeCarried = 0;
}
}
if(toBeCarried != 0)
{
newNumber.add(0, toBeCarried);
}
// Insert appropriate zeros at end of new row
for(int j = 0; j < i; j++)
newNumber.add(0);
// Insert appropriate zeros at beginning of old row
int oldResultLength = resultNumber.size();
int newNumberLength = newNumber.size();
int difference = newNumberLength - oldResultLength;
for(int j = 0; j < difference; j++)
resultNumber.add(0, 0);
// Update the resultNumber
toBeCarried = 0;
for(int j = resultNumber.size() - 1; j >= 0; j--)
{
int sum = toBeCarried + resultNumber.get(j) + newNumber.get(j);
resultNumber.set(j, sum % 10);
if(sum > 9)
{
toBeCarried = sum / 10;
}
else
{
toBeCarried = 0;
}
}
if(toBeCarried > 0)
{
resultNumber.add(0, toBeCarried);
}
}
return resultNumber;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.