As we know that every number can be represented as sum(or difference) of powers of 2, therefore what we can do is represent the constant as a sum of powers of 2.
For this purpose we can use the bitwise left shift operator. When a number is bitwise left shifted it is multiplied by 2 for every bit shift.
For example, suppose we want to multiply a variable say "a" by 10 then what we can do is
a = a << 3 + a << 1;
The expression a << 3 multiplies a by 8 ans expression a<<1 multiplies it by 2.
So basically what we have here is a = a*8 + a*2 = a*10
Similarly for multiplying with 7 what we can do is
a = a<<3 - a; or a = a<<2 + a<<1 + a;
Both these statements multiply a by 7.
#include<iostream>
using namespace std;
// Returns n * 7
int multiplyBySeven(int n)
{
// OR (n << 2) + (n << 1) + n
return (n << 3) - n;
}
// Returns n * 12
int multiplyByTwelve(int n)
{
return (n << 3) + (n << 2);
}
int main()
{
cout << multiplyBySeven(5) << endl;
cout << multiplyByTwelve(5) << endl;
return 0;
}
class GFG {
// Returns n * 7
static int multiplyBySeven(int n)
{
// OR (n << 2) + (n << 1) + n
return (n << 3) - n;
}
// Returns n * 12
static int multiplyByTwelve(int n)
{
return (n << 3) + (n << 2);
}
// Driver code
public static void main(String[] args)
{
System.out.println(multiplyBySeven(5));
System.out.println(multiplyByTwelve(5));
}
}
// This code is contributed by Anant Agarwal.
# Python3 program to Multiplying a
# variable with a constant
# Returns n * 7
def multiplyBySeven(n):
# OR (n << 2) + (n << 1) + n
return (n << 3) - n
# Returns n * 12
def multiplyByTwelve(n):
return (n << 3) + (n << 2)
# Driver code
print(multiplyBySeven(5))
print(multiplyByTwelve(5))
# This code is contributed by Anant Agarwal.
// C# program to Multiplying a
// variable with a constant
using System;
class GFG
{
// Returns n * 7
static int multiplyBySeven(int n)
{
// OR (n << 2) + (n << 1) + n
return (n << 3) - n;
}
// Returns n * 12
static int multiplyByTwelve(int n)
{
return (n << 3) + (n << 2);
}
// Driver code
public static void Main()
{
Console.WriteLine(multiplyBySeven(5));
Console.WriteLine(multiplyByTwelve(5));
}
}
// This code is contributed by Anant Agarwal.
<?php
// PHP program of multiply operator
// Returns n * 7
function multiplyBySeven($n)
{
return ($n << 3) - $n;
}
// Returns n * 12
function multiplyByTwelve($n)
{
return ($n << 3) + ($n << 2);
}
// Driver Code
echo multiplyBySeven(5), "\n";
echo multiplyByTwelve(5), "\n";
// This code is contributed by Ajit
?>
<script>
// Python3 program to Multiplying a
// variable with a constant
// Returns n * 7
function multiplyBySeven(n)
{
// OR (n << 2) + (n << 1) + n
return (n << 3) - n;
}
// Returns n * 12
function multiplyByTwelve(n)
{
return (n << 3) + (n << 2);
}
// Driver code
document.write(multiplyBySeven(5) + "<br>");
document.write(multiplyByTwelve(5) + "<br>");
// This code is contributed by Surbhi Tyagi.
</script>
Output :
35 60
Time Complexity: O(1)
Auxiliary Space: O(1)
We just need to find the combination of powers of 2. Also, this comes really handy when we have a very large dataset and each one of them requires multiplication with the same constant as bitwise operators are faster as compared to mathematical operators.