Para um determinado número positivo, precisamos dividir um número por 3 sem usar nenhum desses operadores *, /, +, -%.
Exemplos: 
 

Input : 48 
Output : 16

Input : 16  
Output : 5 

Algoritmo 
 

  1. Pegue um número num, soma = 0
  2. while (num> 3), desloca o número à esquerda em 2 bits e soma = adiciona (num >> 2, soma). Crie uma função add (x, y) para adicionar dois números por operador bit a bit 
    • Pegue x, y
    • execute um loop do while até que a não seja zero
    • a = x & y, b = x ^ y ;, y = b;
    • após terminar o loop, retorna o valor de b que dá a soma de x e y
  3. Pegue o AND bit a bit de num com 3 
    para novo num = add (num >> 2, num & 3)
  4. Depois de terminar o loop while imprima o valor da soma que dá o resultado final.

Por exemplo, se o seu número for 10, converta para binário 10 => 00001010 
Se 10> 3 então desloque o número binário 2 bits, Now num será 00000010 ou seja, 2 
Now sum será 2 
num = (desloque o número em 2 bits) + (número BITWISE AND 3) 
num = 2 + 2 
Agora o número será 4 então, 4> 3 => verdadeiro, então o loop será repetido 
4 => 00000100 então desloque o número binário 2 bits 
Agora soma = 2 + 1 ou seja, soma = 3 (este valor é retornado) 
num = (desloca o número (00000100) em 2 bits) + (número BITWISE E 3) 
num = 1 + 0 
ou seja, resto = 1 
 



// 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 3
int 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 program
int main(void)
{
    int num = 48;
    cout << "The number divided by 3 is ";
    cout << divideby3(num);
 
    return 0;
}
Saída: 
O número dividido por 3 é 16

 

Este artigo é uma contribuição de DANISH_RAZA . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.