Números binarios invertidos
La representación binaria de 13 es 1101, que al invertirlo da 1011 cuya representación decimal es el número 11.
Definir la función
1 |
transformado :: Integer -> Integer |
tal que (transformado x) es la representación decimal del número obtenido invirtiendo la representación binaria de x. Por ejemplo,
1 2 |
transformado 13 == 11 transformado 47 == 61 |
Nota: El ejercicio está basado en el problema Reversed Binary Numbers de Kattis.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
transformado :: Integer -> Integer transformado = bin2int . reverse . int2bin -- (int2bin x) es la representación binaria de x. Por ejemplo, -- int2bin 13 == [1,0,1,1] int2bin :: Integer -> [Integer] int2bin n | n < 2 = [n] | otherwise = n `mod` 2 : int2bin (n `div` 2) -- (bin2int x) es la representación decimal del número binario x. Por -- ejemplo, -- bin2int [1,0,1,1] == 13 -- bin2int (reverse [1,0,1,1]) == 11 bin2int :: [Integer] -> Integer bin2int = foldr (\x y -> x + 2*y) 0 |