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



filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to evaluate ceil(7n/8) without using * and /
#include<stdio.h>
  
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to evaluate ceil
// (7n/8) without using * and 
  
function multiplyBySevenByEight( $n)
{
    // Note the inner bracket here. 
    // This is needed because 
    // precedence of '-' operator 
    // is higher than '<<' 
      
    return ($n - ($n >> 3));
}
  
// Driver Code
$n = 9;
echo multiplyBySevenByEight($n);
  
// This code is contributed by Ajit
?>

chevron_right



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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C program to evaluate 7n/8 without using * and /
#include<stdio.h>
  
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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.

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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.

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to evaluate 7n/8
// without using * and /
  
function 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;
    echo multiplyBySevenByEight($n);
  
// This code is contributed by anuj_67.
?>

chevron_right



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.

This article is contributed by Rajeev. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



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.