Go y Golang

Comprobar si es número narcisista en Go

Introducción

Llega el turno del lenguaje de programación Go o GoLang para escribir el algoritmo que determine si un número es narcisista.

Número narcisista en Go

Si quieres conocer más sobre el tema, lee: algoritmo para calcular número narcisista.

Comprobar si es número narcisista en Go

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.

Implementación del algoritmo

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:

Ejecución del algoritmo en Go

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.