Hello All
I am having some problems with a C++ class that i am taking and after looking around on the web I am still lost.
The assignment that I am working on right now is as follows:

``````Two numbers are entered in from the keyboard. If the
larger number is odd, the smaller number is added to an accumulator. Then the larger number
is integer divided by two and the smaller number is doubled. Again if the larger number's
division is odd, the smaller number's doubling is added to an accumulator. lf the larger number
is even, nothing is added to the accumulator. This is repeated until the large number
sequence equals zero. The accumulator now holds the multiplication answer.
Write a program using functions, that will accomplish this task. Repeat until the user wishes to stop.
lt is not necessary to display the accumulation work as shown in the examples.
Output is to the screen and printer and should look like:
Your Name Class # Date & Time
XXXX times XXXX by conventional math = XXXXXXX
XXXX times XXXX by Zoo's method = XXXXXXX
Example 1) 75 x 23 = 1725
75			 23 				23
37 			46 				46
18 			92 				O
9 			184 				184
4 			368				 O
2 			736 				O
1 			1472 				1472
1725(TOTAL & PRODUCT)

Example 2)
122 x 251 = 30622
251 		122 					122
125 		244 					244
62 		488 					O
31 		976 					976
15 		1952 					1952
7 		3904 					3904
3 		7808 					7808
1 		15616					 15616
30622(TOTAL & PRODUCT)``````

If anyone could point me in a good direction i would be most great full
Thanx

5
Contributors
10
Replies
11
Views
9 Years
Discussion Span
Last Post by kuru225

>>If the larger number is odd,

what happens if the larger number is even ?

Ancient, thanks for the quick reply.
if the larger number is even then the accumulator is '0'

If you have any ideas on how the logic would go your help would be most appreciated
thanks

Write it out by hand. It might start like this:

``````enter two numbers.
calculate the product of the two numbers.
determine which number is larger, call it A, and call the other number B.
use an accumulator, initialzed to zero
as long as A is above zero
if A is odd
divide A by 2 using integer math (means all remainders are dropped)
//etc``````

and if A is initially even, don't do anything.

if A is even at anypoint, whether initially or not, then don't add B to accumulator, but you still need to divide A by 2 using integer math and double B. So if A = 44 and B = 11;

``````A    B    Total Accumulated so far
44 11     0
22 22     0
11 44     44
5   88     132
2   176   132
1   352   484``````

AD: If the (originally) larger number is even you simply don't add the (originally) smaller one to the accumulator. Since "odd" just means that the one's bit is set, it's essentially binary mutiplication using shifts (division by 2) and adds.

kuru: Have you written a program before? Do you have an attempt for this one? Anything?

Nuc: so if i have you right, i could just write an 'if' statement saying:

``````if(numA<numB)
numA / 2.0
else
accum +=numA``````

and then i could wrap this in a function for later use

Ok
i have been tinkering around with the coding of this, and i think there is a problem with this function i have
could someone give me there input

``````void getnums()
{

int numA, numB, x, result;
cout << "Your two numbers to multiply are?"<<endl;
cin >> numA >> numB;

if (numB < numA)
{
x +=numA;
numA = numB;
numB = x;
}

result = process( numA, numB);

cout << numA << " times " << numB<< " by conventional math = " << (numA * numB) <<endl;
cout << numA << " times " << numB<< " by Zoo's method = " << result <<endl;

}``````

the function works fine if numA starts smaller then numB but if numB is smaller then numA it sort of goes to the crapper
any help would be welcomed
thanx

Problem is that `x` is not initialized to zero (I take that you simply want to swap the values).

You might have it a bit simpler like ...

``````if (numB < numA)
{
// use x only inside the if-block
int x = numA;
numA = numB;
numB = x;
}``````

mitrmkar:
that helps a lot
i should have known to do that instead of just claiming it as an integer
thank you

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.