Dado un número entero (32 bits con signo), escriba una función para verificar si es una potencia de 4.
Solución 1 de Java: iteración ingenua
public boolean isPowerOfFour(int num) { while(num>0){ if(num==1){ return true; } if(num%4!=0){ return false; }else{ num=num/4; } } return false; } |
Solución Java 2 – Manipulación de bits
public boolean isPowerOfFour(int num) { int count0=0; int count1=0; while(num>0){ if((num&1)==1){ count1++; }else{ count0++; } num>>=1; } return count1==1 && (count0%2==0); } |
Solución 3 de Java – Ecuación matemática
Podemos usar la siguiente fórmula para resolver este problema sin usar recursividad / iteración.
public boolean isPowerOfFour(int num) { if(num==0) return false; int pow = (int) (Math.log(num) / Math.log(4)); if(num==Math.pow(4, pow)){ return true; }else{ return false; } } |