![]() |
VOOZH | about |
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 :
Output :
8
Time Complexity: O(1)
Auxiliary Space: O(1)
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 program 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.
Output :
13
Time Complexity: O(1)
Auxiliary Space: O(1)
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.
Approach:
Below is the implementation of this approach:
Output:
8
Time Complexity: O(1), as it only involves a few bitwise operations regardless of the input value n.
Space Complexity: O(1) since it does not require any additional space that grows with the input size.
This article is contributed by Rajeev.