0votos

Descomposición de un producto en suma de potencias de 2 en Haskell

por josejuan hace 3 años

.

No importa el lenguaje que usen, aunque preferiblemente C o C++. Descomponer el primero de los números ingresados por el usuario en sus potencias de dos menores a él.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import Data.List (intercalate) 
 
-- Representación binaria (ej. 5 -> [1, 0, 1]) 
bits :: ℤ →  [ℤ] 
bits = map (`mod` 2) ∘ takeWhile (>0) ∘ iterate (÷ 2) 
 
-- Potencias de 2 cuya suma es `n` (ej. 5 -> [1, 4]) 
potencias :: ℤ → [ℤ] 
potencias = filter (>0) ∘ zipWith (×) ((2^) ↥ [0…]) ∘ bits 
 
-- Descompone en suma de potencias de dos uno de los multiplicandos 
descompón :: ℤ → ℤ → 𝐒 
descompón a = intercalate " + " ∘ map (λp → show a ⧺ " * " ⧺ show p) ∘ potencias 
 
 
{- 
 
> putStrLn $ descompón 47 22 
47 * 2 + 47 * 4 + 47 * 16 
> putStrLn $ descompón 1234 4321 
1234 * 1 + 1234 * 32 + 1234 * 64 + 1234 * 128 + 1234 * 4096 
 
-} 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.