C++ program to divide a number by 3 without using *, / , +, -, % operators - GeeksforGeeks

07 Sep, 2021
For a given positive number we need to divide a number by 3 without using any of these *, /, +, – % operatorsExamples:  
Input : 48 
Output : 16

Input : 16  
Output : 5 
 
Algorithm  
Take a number num, sum = 0while(num>3), shift the number left by 2 bits and sum = add(num >> 2, sum). Create a function add(x, y) for adding two number by bitwise operator Take x, yrun a do while loop till a is not zeroa = x & y, b = x ^ y;, y = b;after terminating loop return value of b which gives sum of x and yTake bitwise AND of num with 3 for new num = add( num >> 2, num & 3)After terminating while loop print the value of sum which give final result .
Take a number num, sum = 0
while(num>3), shift the number left by 2 bits and sum = add(num >> 2, sum). Create a function add(x, y) for adding two number by bitwise operator Take x, yrun a do while loop till a is not zeroa = x & y, b = x ^ y;, y = b;after terminating loop return value of b which gives sum of x and y
Take x, y
run a do while loop till a is not zero
a = x & y, b = x ^ y;, y = b;
after terminating loop return value of b which gives sum of x and y
Take bitwise AND of num with 3 for new num = add( num >> 2, num & 3)
After terminating while loop print the value of sum which give final result .
 
For example if your number is 10 then convert to binary 10 => 00001010 If 10 > 3 then shift the binary number 2 bits, Now num will be 00000010 i.e, 2 Now sum will be 2 num = (shift the number by 2 bits) + (number BITWISE AND 3) num = 2+2 Now the number will be 4 then, 4 > 3 => true so loop will be repeated 4 => 00000100 then shift the binary number 2 bits Now sum = 2 + 1 ie, sum = 3 (this value is returned) num = (shift the number(00000100) by 2 bits) + (number BITWISE AND 3) num = 1 + 0 ie remainder = 1  
 
CPP
// C++ program for divided a number by// 3 without using operator#include <bits/stdc++.h>using namespace std; // A function to add 2 numbers without using +int add(int x, int y){    int a, b;    do {        a = x & y;        b = x ^ y;        x = a << 1;        y = b;    } while (a);     return b;} // Function to divide by 3int divideby3(int num){    int sum = 0;     while (num > 3) {        sum = add(num >> 2, sum);        num = add(num >> 2, num & 3);    }     if (num == 3)        sum = add(sum, 1);     return sum;} // Driver programint main(void){    int num = 48;    cout << "The number divided by 3 is ";    cout << divideby3(num);     return 0;}
The number divided by 3 is 16
 
This article is contributed by DANISH_RAZA. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
gulshankumarar231
Oracle
Mathematical
Oracle
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Modular multiplicative inverse
Count all possible paths from top left to bottom right of a mXn matrix
Fizz Buzz Implementation
Check if a number is Palindrome
Program to multiply two matrices
Count ways to reach the n'th stair
Merge two sorted arrays with O(1) extra space
Generate all permutation of a set in Python