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:
El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…
Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…
En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…
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 web usa cookies.
Ver comentarios