Fácil 0 resolvidos 0% de aceitação

Potência de Dois

Verifique se um número é uma potência de dois.

O que você vai aprender

  • Verificar potências de dois dividindo pela metade
  • Usar o truque de bits n & (n - 1)
  • Tratar zero e números negativos

Problema

Ver original (inglês)

Decida se n é igual a 2ᵏ para algum número inteiro k ≥ 0 (1, 2, 4, 8, …).

Implemente is_power_of_two(n).

Entrada

n: O número a ser verificado.

Saída

Retorne true se n for uma potência de dois.

Restrições

-10¹⁸ ≤ n ≤ 10¹⁸

Exemplos

Exemplo 1
Entrada:
n = 64

Saída esperada:
expected = True
Entrada:
long long n = 64;

Saída esperada:
bool expected = true;
Entrada:
long n = 64;

Saída esperada:
bool expected = true;

Explicação

64 = 2⁶.

Exemplo 2
Entrada:
n = 12

Saída esperada:
expected = False
Entrada:
long long n = 12;

Saída esperada:
bool expected = false;
Entrada:
long n = 12;

Saída esperada:
bool expected = false;

Explicação

12 = 4 × 3 tem um fator ímpar, portanto não é uma potência de dois.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Uma potência de dois tem exatamente um bit ligado em binário.

Dica 2

Verifique se o número é positivo antes de usar um teste baseado em bits.

Dica 3

Números negativos e zero nunca são potências de dois.

Complexidade esperada

tempo O(1), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.