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 ).
The multiplication operator ( * ) produces the product of the operands.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With