Multiply two integers without using multiplication, division and bitwise operators, and no loops
By making use of recursion, we can multiply two integers with the given constraints.
To multiply x and y, recursively add x y times.
Approach:
Since we cannot use any of the given symbols, the only way left is to use recursion, with the fact that x is to be added to x y times.
Base case: When the numbers of times x has to be added becomes 0.
Recursive call: If the base case is not met, then add x to the current resultant value and pass it to the next iteration.
C++
// C++ program to Multiply two integers without // using multiplication, division and bitwise // operators, and no loops #include<iostream> using namespace std; class GFG { /* function to multiply two numbers x and y*/ public : int multiply( int x, int y) { /* 0 multiplied with anything gives 0 */ if (y == 0) return 0; /* Add x one by one */ if (y > 0 ) return (x + multiply(x, y-1)); /* the case where y is negative */ if (y < 0 ) return -multiply(x, -y); } }; // Driver code int main() { GFG g; cout << endl << g.multiply(5, -11); getchar (); return 0; } // This code is contributed by SoM15242 |
C
#include<stdio.h> /* function to multiply two numbers x and y*/ int multiply( int x, int y) { /* 0 multiplied with anything gives 0 */ if (y == 0) return 0; /* Add x one by one */ if (y > 0 ) return (x + multiply(x, y-1)); /* the case where y is negative */ if (y < 0 ) return -multiply(x, -y); } int main() { printf ( "\n %d" , multiply(5, -11)); getchar (); return 0; } |
Java
class GFG { /* function to multiply two numbers x and y*/ static int multiply( int x, int y) { /* 0 multiplied with anything gives 0 */ if (y == 0 ) return 0 ; /* Add x one by one */ if (y > 0 ) return (x + multiply(x, y - 1 )); /* the case where y is negative */ if (y < 0 ) return -multiply(x, -y); return - 1 ; } // Driver code public static void main(String[] args) { System.out.print( "\n" + multiply( 5 , - 11 )); } } // This code is contributed by Anant Agarwal. |
Python3
# Function to multiply two numbers # x and y def multiply(x,y): # 0 multiplied with anything # gives 0 if (y = = 0 ): return 0 # Add x one by one if (y > 0 ): return (x + multiply(x, y - 1 )) # The case where y is negative if (y < 0 ): return - multiply(x, - y) # Driver code print (multiply( 5 , - 11 )) # This code is contributed by Anant Agarwal. |
C#
// Multiply two integers without // using multiplication, division // and bitwise operators, and no // loops using System; class GFG { // function to multiply two numbers // x and y static int multiply( int x, int y) { // 0 multiplied with anything gives 0 if (y == 0) return 0; // Add x one by one if (y > 0) return (x + multiply(x, y - 1)); // the case where y is negative if (y < 0) return -multiply(x, -y); return -1; } // Driver code public static void Main() { Console.WriteLine(multiply(5, -11)); } } // This code is contributed by vt_m. |
PHP
<?php // function to multiply // two numbers x and y function multiply( $x , $y ) { /* 0 multiplied with anything gives 0 */ if ( $y == 0) return 0; /* Add x one by one */ if ( $y > 0 ) return ( $x + multiply( $x , $y - 1)); /* the case where y is negative */ if ( $y < 0 ) return -multiply( $x , - $y ); } // Driver Code echo multiply(5, -11); // This code is contributed by mits. ?> |
Javascript
<script> // javascript program to Multiply two integers without // using multiplication, division and bitwise // operators, and no loops /* function to multiply two numbers x and y*/ function multiply( x, y) { /* 0 multiplied with anything gives 0 */ if (y == 0) return 0; /* Add x one by one */ if (y > 0 ) return (x + multiply(x, y-1)); /* the case where y is negative */ if (y < 0 ) return -multiply(x, -y); } // Driver code document.write( multiply(5, -11)); // This code is contributed by todaysgaurav </script> |
-55
Time Complexity: O(y) where y is the second argument to function multiply().
Auxiliary Space: O(y) for the recursion stack
Another approach: The problem can also be solved using basic math property
(a+b)2 = a2 + b2 + 2a*b
⇒ a*b = ((a+b)2 – a2 – b2) / 2
For computing the square of numbers, we can use the power function in C++ and for dividing by 2 in the above expression we can write a recursive function.
Below is the implementation of the above approach:
C++
// C++ program to Multiply two integers without // using multiplication, division and bitwise // operators, and no loops #include<bits/stdc++.h> using namespace std; // divide a number by 2 recursively int divideby2( int num) { if (num<2) return 0; return 1 + divideby2(num-2); } int multiply( int a, int b) { int whole_square= pow (a+b,2); int a_square= pow (a,2); int b_square= pow (b,2); int val= whole_square- a_square - b_square; int product; // for positive value of variable val if (val>=0) product = divideby2(val); // for negative value of variable val // we first compute the division by 2 for // positive val and by subtracting from // 0 we can make it negative else product = 0 - divideby2( abs (val)); return product; } // Driver code int main() { int a=5; int b=-11; cout << multiply(a,b); return 0; } // This code is contributed by Pushpesh raj. |
-55
Russian Peasant (Multiply two numbers using bitwise operators)
Please write comments if you find any of the above code/algorithm incorrect, or find better ways to solve the same problem.