# Calculate 7n/8 without using division and multiplication operators

Given an integer, write a function that calculates ⌈7n/8⌉ (ceiling of 7n/8) without using division and multiplication operators.

We strongly recommend to minimize your browser and try this yourself first.

Method 1:
The idea is to first calculate floor of n/8, i.e., ⌊n/8⌋ using right shift bitwise operator. The expression n>>3 produces the same.

If we subtract ⌊n/8⌋ from n, we get ⌈7n/8⌉

Below is the implementation of above idea :

## CPP

 `// C program to evaluate ceil(7n/8) without using * and / ` `#include ` ` `  `int` `multiplyBySevenByEight(unsigned ``int` `n) ` `{ ` `    ``/* Note the inner bracket here. This is needed ` `       ``because precedence of '-' operator is higher ` `       ``than '<<' */` `    ``return` `(n - (n>>3)); ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``unsigned ``int` `n = 9; ` `    ``printf``(``"%d"``, multiplyBySevenByEight(n)); ` `    ``return` `0; ` `} `

## Java

 `// Java program to evaluate ceil(7n/8)  ` `// without using * and  ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `    ``static` `int` `multiplyBySevenByEight(``int` `n) ` `    ``{ ` `        ``/* Note the inner bracket here. This is needed ` `        ``because precedence of '-' operator is higher ` `        ``than '<<' */` `        ``return` `(n - (n >> ``3``)); ` `    ``} ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``int` `n = ``9``; ` `        ``System.out.println(multiplyBySevenByEight(n)); ` `    ``} ` `} ` ` `  `//This code is contributed by Anshika Goyal. `

## Python3

 `# Python program to evaluate ceil(7n/8) without using * and / ` ` `  `def` `multiplyBySevenByEight(n): ` `     `  `    ``# Note the inner bracket here. This is needed ` `    ``# because precedence of '-' operator is higher ` `    ``# than '<<'  ` `    ``return` `(n ``-` `(n>>``3``)) ` ` `  ` `  `# Driver program to test above function */ ` `n ``=` `9` `print``(multiplyBySevenByEight(n)) ` ` `  `# This code is contributed by ` `# Smitha Dinesh Semwal `

## C#

 `// C# program to evaluate ceil(7n/8)  ` `// without using * and  ` `using` `System; ` ` `  `public` `class` `GFG { ` ` `  `    ``static` `int` `multiplyBySevenByEight(``int` `n) ` `    ``{ ` `        ``/* Note the inner bracket here. ` `        ``This is needed because precedence ` `        ``of '-' operator is higher than ` `        ``'<<' */` `        ``return` `(n - (n >> 3)); ` `    ``} ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 9; ` `         `  `        ``Console.WriteLine( ` `            ``multiplyBySevenByEight(n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007. `

## PHP

 `> 3)); ` `} ` ` `  `// Driver Code ` `\$n` `= 9; ` `echo` `multiplyBySevenByEight(``\$n``); ` ` `  `// This code is contributed by Ajit ` `?> `

Output :

`8`

Method 2 (Always matches with 7*n/8):
The above method doesn’t always produce result same as “printf(“%u”, 7*n/8)”. For example, the value of expression 7*n/8 is 13 for n = 15, but above proogram produces 14. Below is modified version that always matches 7*n/8. The idea is to first multiply the number with 7, then divide by 8 as it happens in expression 7*n/8.

## C++

 `// C program to evaluate 7n/8 without using * and / ` `#include ` ` `  `int` `multiplyBySevenByEight(unsigned ``int` `n) ` `{     ` `    ``/* Step 1) First multiply number by 7 i.e. 7n = (n << 3) -n ` `     ``* Step 2) Divide result by 8 */` `   ``return` `((n << 3) -n) >> 3; ` `} ` ` `  `/* Driver program to test above function */` `int` `main() ` `{ ` `    ``unsigned ``int` `n = 15; ` `    ``printf``(``"%u"``, multiplyBySevenByEight(n)); ` `    ``return` `0; ` `} `

## Java

 `// Java program to evaluate 7n/8  ` `// without using * and / ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` ` `  `    ``static` `int` `multiplyBySevenByEight(``int` `n) ` `    ``{  ` `        ``// Step 1) First multiply number  ` `        ``// by 7 i.e. 7n = (n << 3) -n ` `        ``// * Step 2) Divide result by 8  ` `        ``return` `((n << ``3``) -n) >> ``3``; ` `    ``} ` `     `  `    ``// Driver program  ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `         `  `        ``int` `n = ``15``; ` `        ``System.out.println(multiplyBySevenByEight(n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Anshika Goyal. `

## Python3

 `# python program to evaluate 7n/8  ` `# without using * and / ` ` `  `def` `multiplyBySevenByEight(n): ` `     `  `    ``#Step 1) First multiply number  ` `    ``# by 7 i.e. 7n = (n << 3) -n ` `    ``# Step 2) Divide result by 8  ` `    ``return` `((n << ``3``) ``-``n) >> ``3``; ` `     `  `# Driver code ` `n ``=` `15``; ` `print``(multiplyBySevenByEight(n)); ` ` `  `#this code is contributed by sam007. `

## C#

 `// C# program to evaluate 7n/8  ` `// without using * and / ` `using` `System; ` ` `  `public` `class` `GFG { ` `     `  `    ``static` `int` `multiplyBySevenByEight(``int` `n) ` `    ``{  ` `         `  `        ``// Step 1) First multiply number  ` `        ``// by 7 i.e. 7n = (n << 3) -n ` `        ``// * Step 2) Divide result by 8  ` `        ``return` `((n << 3) -n) >> 3; ` `    ``} ` `     `  `    ``// Driver program  ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 15; ` `         `  `        ``Console.WriteLine( ` `            ``multiplyBySevenByEight(n)); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007. `

## PHP

 `> 3; ` `} ` ` `  `    ``// Driver Code ` `    ``\$n` `= 15; ` `    ``echo` `multiplyBySevenByEight(``\$n``); ` ` `  `// This code is contributed by anuj_67. ` `?> `

Output :

`13`

Note :
There is difference between outcomes of two methods. The method 1 produces ceil(7n/8), but method two produces integer value of 7n/8. For example, for n = 15, outcome of first method is 14, but for second method is 13.

Thanks to Narendra Kangralkar for suggesting this method.

My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t, vt_m

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.