Llega el turno del lenguaje de programación Go o GoLang para escribir el algoritmo que determine si un número es narcisista.
Si quieres conocer más sobre el tema, lee: algoritmo para calcular número narcisista.
De nuevo traigo una función para solucionar este ejercicio. Es la siguiente:
func esNarcisista(numero int) bool{
numeroComoCadena := strconv.Itoa(numero)
longitudDeNumero := len(numeroComoCadena)
suma := 0
for indice := 0; indice < longitudDeNumero; indice++{
// Convertir carácter a entero
cifraActual := numeroComoCadena[indice] - '0'
/*
Elevarlo al exponente dado por la longitud del número
por cierto, se castea a float64 porque math.Pow necesita un float64
*/ elevado := math.Pow(float64(cifraActual), float64(longitudDeNumero))
// Vamos sumando el resultado
suma = suma + int(elevado)
}
// Finalmente comprobamos si el número es igual a la suma
if suma == numero{
return true
}else{
return false
}
}
Usamos math.Pow
para elevar números a una potencia, así como strconv.Itoa
para convertir un entero a una cadena, y finalmente a len
para determinar la longitud de una cadena.
Para convertir cada carácter del número a un entero le restamos ‘0’ a dicho carácter, eso nos dará su representación numérica en lugar de su representación en el código ASCII.
La función recibe un entero y devuelve un booleano; así de fácil. Por lo tanto un código completo de su implementación podría ser este:
/*
Determinar si un número es narcisista usando Go/Golang
parzibyte.me/blog
*/package main
import(
"fmt"
"math"
"strconv"
)
func main(){
/*
Aquí probamos un arreglo de números, la función está más abajo
*/ numeros := []int{1, 2, 3, 4, 153, 28, 11, 96, 407, 1634, 54748}
for _, numero := range numeros{
fmt.Printf("¿%d es narcisista? %t\n", numero, esNarcisista(numero))
}
}
// Aquí la función
func esNarcisista(numero int) bool{
numeroComoCadena := strconv.Itoa(numero)
longitudDeNumero := len(numeroComoCadena)
suma := 0
for indice := 0; indice < longitudDeNumero; indice++{
// Convertir carácter a entero
cifraActual := numeroComoCadena[indice] - '0'
/*
Elevarlo al exponente dado por la longitud del número
por cierto, se castea a float64 porque math.Pow necesita un float64
*/ elevado := math.Pow(float64(cifraActual), float64(longitudDeNumero))
// Vamos sumando el resultado
suma = suma + int(elevado)
}
// Finalmente comprobamos si el número es igual a la suma
if suma == numero{
return true
}else{
return false
}
}
En este caso probamos todo un arreglo de números e imprimimos los resultados en pantalla. La salida se ve a continuación:
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.
Ver comentarios