Conversion gloutonne

Algorithme glouton

Pour convertir en base \(2\) un entier écrit en base \(10\), nous pouvons utiliser la méthode des soustractions successives, qui un algorithme glouton.

Cet algorithme est identique à celui du rendu de monnaie, en considérant les puissances de \(2\) successives comme valeurs des pièces.

Par exemple, pour obtenir la représentation binaire de \(43\), on peut utiliser les valeurs \(32\), \(16\), \(8\), \(4\), \(2\) et \(1\), classées par ordre décroissant. On se limite à \(32\) car la puissance suivante, \(64\), est strictement supérieure à \(43\).

On procède alors ainsi :

  • Pour \(43\) on peut prendre \(32\) , il reste \(11\),
  • Pour \(11\) on ne peut pas prendre \(16\) (en effet \(16>11\)),
  • Pour \(11\) on peut prendre \(8\), il reste \(3\),
  • Pour \(3\) on ne peut pas prendre \(4\),
  • Pour \(3\) on peut prendre \(2\), il reste \(1\),
  • Pour \(1\) on peut prendre \(1\), il reste \(0\).

On obtient la représentation binaire en observant les différentes étapes : s'il est possible de prendre une puissance, on note un 1, si c'est impossible, on note un 0.

Puissance de 2 Possible ? Bit correspondant
\(32\) Oui 1
\(16\) Non 0
\(8\) Oui 1
\(4\) Non 0
\(2\) Oui 1
\(1\) Oui 1

Dans la pratique, pour convertir « à la main » \(43\) en binaire, cela revient réaliser le tableau suivant :

\(32\) \(16\) \(8\) \(4\) \(2\) \(1\)
1 0 1 0 1 1

On en déduit que \(43\) en décimal s'écrit 101011 en binaire.

Travail à faire

Une fonction binaire a été écrite qui prend en paramètre un entier positif ou nul écrit en base \(10\), et renvoie la chaîne de caractères la plus courte possible (sans zéros inutiles) représentant son écriture binaire.

Cependant, cette fonction contient des erreurs.

Corriger la fonction pour quelle puisse passer les tests.

Exemples
>>> binaire(43)
'101011'
>>> binaire(32)
'100000'
>>> binaire(0)
'0'
>>> binaire(54321)
'1101010000110001'
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.128013.128073s3_8èufvIy n7aS1me(P24C:twih*)6o;bcdg/0làqp.r-,=+k95Rxé050L0t0A0p0C0P0c0m0K0P0p0c0c0X010A0C0S010406050c0h0s0s0p0U0l040q0H0P0h0|0H0n0m020p0s0S0I0m0$0t160U0R0h0t0c050N13151719110S041x1E051H0N1H1J1E110L0C0j0;0?0^0`0D0C0M0D0P1X0D0A0 050,0J0P0t1S0@0_011W1Y1!1Y0A1*1,1(0A0J0H0L191)0U1F0A0D0;1c0c0S0p0n0`0w011.1U010i0.0t0n1k0t1(292b2g1:2j1,2m0s2o040a0m0v0U0H0S0H0c0C1f1h0*270U0U0t0K2J1x2q0n1F0N252V0A2322240L2s0`1!0n2l2G1(1P1R0=1/2)0C2+0n1 1Q1(0S2O1F2T2V30122a1h2;2h2_0U160P0 0m0r2S3410332r361:383a3c0w3f2b3h2T2(013m0p3b040m0d3q2U113t3k0`3w3y0m0x3C3s343u3I3c0#3M3E3O3G3v0H393x3c0G3T3i351T3l3Y3n3z0o3%3F3*3H3,3!3z0f3:3V3=3X3Z3J0!3{3j3}3Q040r0O423)2=3~3-0r3e1y3g3U434b450r3p4g3r4i4a373@3y0r3B4o3D3(3P4t0 0r3L4x3N4j4s3 4C3S4F4q4A4J463$4M4z3W4l3/4S3;4k4B463`4X3|4Z4P0r414F1G2~1x2/2Y0L2$3u0K1 2y0)1Q1F2}0t2 3g3M054_0*514H1:0Z0 0*0i534Y2h0B3c5e4(370i0 0J2@0-2O5j580`0~040u5s4r3l0 2_0s0J5r4-5f1:5v0F0z3T0m5N0m4T3}5a040C5d4F5P5H3H5B0H5D5F305X5k1:0H0 0X0X3M5)5t010s0C0 485G5*5u0 5L4M5O615;5z0`5S2O0A0h0U0n5:5Q4b0c2e04010O013T06616d370 2O130P0,0A6c5Y015,045/5W6o1:6f0 016k4M6m5O6D5Z040S0h0C0^2b0K0t0e160%6w5|6y5-6Z5=5@4C5M6L6x5S0B1W1,6%645?5^044n5(6M6#040E6=3P0 6P6R0c6T6V6X703W6z026t0I6B6{6x0n5!5$0t5y3u5v5 306K6263716O6Q6S0n6U6W0p6Y6C6x6z7f3g7t3W6)6_793}6z6 7D6!7i7v74767A7C7q7r7I5R0 6/2k7M4k727w757y777B7)2h7b0M0A0I7;1:7K5`326x7o6+7s6|5S5U7`6N5C5E7l7Q5=7?7^7G3r7!7*7T7x7z785{5=80607s626|7S6r0h6t0p6v8b6?7F863v6q1v8w6u8D6z0Y8D6F6h0r6I7q8r8s7h7j898J6$8A7u885%7H6|6z0V8D7S738k7/7X4h8S830 0t0/8a7~6!8p8R8S6,7R8F6s8I8Z7a8Y7g91048v8x8z988c0 8L953}8N6i8Q8;8r8t7+7U7.7W8X6A8+9q8.9t9i4b6z0N0N8D7K6`4h7Z8?9a0+696b9A6p9L938y3%0N55504.9X0N4;1x0A4?9$2!2W1~202Y0p1+9Z4;1D576?2O0s0e0i0p0Z6V0D0d0 1p1r1t1v0m7p521K3h1E0b0m0y0+0m3x0M3Y2I0D2x0m0M0P0H1e1g0m0n0(6U0^2I1-2L4_152l6U0U0m2aaG1,0:0S1d0:0M0U2b0*aL7,760:2L0w0m1e2k0c0T1Gab040y1g2Z5q1q2l0A0m0Q0;1-a5auar0:0p0j1g0:9|2I0m0L2b0:0P00aiak25anapar0Aat2L2O0n0L0hb31-0s1g2m0C0t0W0m0.au001va;2a0:avax750C2Obm270n0c0|680taJbxbJ1q9:bH0?0m1!bKaAa68-7-axbH6|17al160A0t0%0 090u0w090F5:a!aK0m0(1t1Q3xa:1-a?bUbWb,bmaL0C0gb$bk0mbicb2Lbo0nbq0t0T0m0k0P0mbyco1h0t0i0iag2FaybS2L2Zar0jbNbV0paHaU7.b%6xb)bb8yb-b/b;b?5:13b~0nc5aI0m2H1l1,b31Q6R0Cata:c8bGcXb(0Ub*cNb.04b:b=b@4Fa%aa119!0+0-0/04.