Programa C++ para dividir um número por 3 sem usar os operadores *, /, +, -,%
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
- Pegue um número num, soma = 0
- 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
- Pegue o AND bit a bit de num com 3
para novo num = add (num >> 2, num & 3) - 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;
}
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.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva