Números de Harshad hereditarios
Un número de Harshad es un entero divisible entre la suma de sus dígitos. Por ejemplo, 201 es un número de Harshad porque es divisible por 3 (la suma de sus dígitos). Cuando se elimina el último dígito de 201 se obtiene 20 que también es un número de Harshad. Cuando se elimina el último dígito de 20 se obtiene 2 que también es un número de Harshad. Los números como el 201 que son de Harshad y que los números obtenidos eliminando sus últimos dígitos siguen siendo de Harshad se llaman números de Harshad hereditarios por la derecha. Definir la función
1 |
numeroHHD :: Int -> Bool |
tal que (numeroHHD n) se verifica si n es un número de Harshad hereditario por la derecha. Por ejemplo,
1 2 3 |
numeroHHD 201 == True numeroHHD 140 == False numeroHHD 1104 == False |
Calcular el mayor número de Harshad hereditario por la derecha con tres dígitos.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-- (numeroH n) se verifica si n es un número de Harshad. -- numeroH 201 == True numeroH :: Int -> Bool numeroH n = rem n (sum (digitos n)) == 0 -- (digitos n) es la lista de los dígitos de n. Por ejemplo, -- digitos 201 == [2,0,1] digitos :: Int -> [Int] digitos n = [read [d] | d <- show n] numeroHHD :: Int -> Bool numeroHHD n | n < 10 = True | otherwise = numeroH n && numeroHHD (div n 10) -- El cálculo es -- ghci> head [n | n <- [999,998..100], numeroHHD n] -- 902 |
La definición no es correcta. Por ejemplo,
pero 14 no es un número de Harshad porque no es divisible por 5.
Tienes toda la razón. La solución está incorrecta.