2012-10-03 21 views
15

Sto provando a scrivere un programma C++ che fa conversioni di base.Base 10 alla base n conversioni

voglio convertire un numero decimale a tutte le altre basi intero da 2 a 20.

Esiste un efficiente e facile da implementare l'algoritmo di base per le conversioni?

+0

c'è un solo modo per convertire i numeri da uno all'altro. Qual è esattamente il problema? –

+0

Quando dici "tutte le altre basi da 2 a 20", presumo tu intenda tutte le basi intere reali da 2 a 20? Nessuna base irreale e nessuna base non intera? Quelli sono più difficili –

+0

Inoltre, qual è il problema? Mostraci il codice che hai finora. –

risposta

23

Non capisco esattamente dove si trova il problema? È molto semplice e straigtforward fare la conversione di base: lo fai come faresti manualmente.

  • divide il numero da basamento
  • scrittura giù la restante
  • ripetere il processo con la parte intera della divisione
  • fermata quando si raggiunge lo zero
  • i resti in retromarcia ordinare le cifre in base

Esempio:

1025 (decimale) basare 15:

1025/15 = 68 , remainder 5 
68 /15 = 4 , remainder 8 
4 /15 = 0 , remainder 4 

Il numero in base 15 è 485

2

Si può avere due problemi:

  • analisi dalla la base originale alla rappresentazione intera nativa del computer (strtol è abbastanza buona in questo).

  • Formattazione nella nuova base. (itoa è abbastanza bravo in questo).

Se si desidera scrivere da soli, potrebbe piacerti lo div function. Si inserisce il numero e la base e si divide la cifra più a destra. Ripeti per ottenere tutte le cifre.

Se si desidera essere più efficienti, è possibile dividere per base quadrata e ottenere due cifre alla volta (utilizzare una tabella di ricerca per ottenere i caratteri ASCII per entrambe le cifre). Here's an example of some very efficient implementations. Cambiarlo per usare una base diversa non sarebbe difficile.

Problemi correlati