← RU Pythoncursus

Uitwerking: Inlever opgave

n = ""
b = ""

while not n.isnumeric():
    n = input("Welk getal wil je omzetten?: ")
n = int(n)

while not b.isnumeric():
    b = input("Welke basis moet het naartoe?: ")
b = int(b)

# Vind de grootste macht:
k = 0
while b**k <= n:
    k += 1
grootste_macht = k - 1

n_origineel = n

nieuw_getal = ""
for macht in range(grootste_macht, -1, -1):
    # Bepaal het cijfer dat bij b**macht hoort:
    cijfer = n // (b**macht)
    # Update n:
    n %= b**macht
    # Voeg het cijfer toe aan het nieuwe getal:
    # (deze if is alleen nodig om b > 9 aan te kunnen, en is niet nodig voor de opdracht)
    if cijfer < 10:
        nieuw_getal += str(cijfer)
    else:
        nieuw_getal += chr(cijfer + 55)

print(f"Het getal {n_origineel} in basis {b} is {nieuw_getal}")

# Efficientere oplossing (kan je uitvinden waarom dit werkt?)
nieuw_getal = ""
n = n_origineel
while n > 0:
    cijfer = n % b
    if cijfer < 10:
        nieuw_getal = str(cijfer) + nieuw_getal
    else:
        nieuw_getal = chr(cijfer + 55) + nieuw_getal
    n = n // b

print(f"Met andere aanpak: {nieuw_getal}")