Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiplying a number without using * operator [closed]

Tags:

I was going through a programming class and was asked this tricky question which was left unanswered till the end of the class.

Question:

How can I multiply any input(Float,int etc) by 7, without using the * operator in TWO steps.

If anyone can give me the answer for this question with the explanation , that would be very helpful.

With TWO STEPS I mean suppose you are running a loop (i=0;i<7;i++) in that case number of steps will be >2, also TYPE CONVERSION, DIVISION,ADDITION etc ( Counts for steps ).

like image 654
Piyush Bhardwaj Avatar asked Apr 22 '13 10:04

Piyush Bhardwaj


People also ask

What is the operator used to multiply?

The multiplication operator ( * ) produces the product of the operands.


1 Answers

Assuming float x or double x is defined in the scope. Then I see the following possibilities to multiply it by 7 without using the * operator:

In C++, you can use the standard functors (first step: create functor, second step: call functor):

x = std::multiplies<float>()(x, 7.0f);  // if x is a float x = std::multiplies<double>()(x, 7.0);  // if x is a double 

Or only use division (Since the compiler already evaluates 1.0 / 7.0, this is only one step):

x = x / (1.0f / 7.0f);  // if x is a float x = x / (1.0  / 7.0);   // if x is a double 

Or use the *= operator (technically, it's not the * operator, but it's only one single step):

x *= 7.0f;  // if x is a float x *= 7.0;   // if x is a double 

Or use addition in the logarithmic scale (this is not to be taken very serious, as well as this requires more than two "steps"):

x = exp(log(x) + log(7.0)); 

Another option is to use an assembly instruction, but I don't want to write that now, since it's overly complicated.

If x is an integer, bit shifting is another option, but not recommended:

x = (x << 3) - x;   // (x * 8) - x 
like image 130
leemes Avatar answered Oct 20 '22 15:10

leemes