Trasformatore da decimale a qualsiasi base compresa tra 2 e 16

di il
3 risposte

Trasformatore da decimale a qualsiasi base compresa tra 2 e 16

Salve a tutti. Avrei da implementare un algoritmo che converta dalla base decimale a un'altra base a scelta (compresa tra 2 e 16). Sono riuscita a scrivere il codice per convertire fino alla base 9, ma non riesco a capire come possa fare in modo che l'algoritmo cambi i numeri con le lettere per funzionare anche dalla base 11 fino alla 16. Ho provato a cercare su internet delle soluzioni ma non funzionano. Se per esempio provo a stampare il numero decimale 1123456789 in base esadecimale, mi esce 421569715 invece di 42F69715. Provo ad allegare il codice qua sotto e spero tanto di non chiedere troppo. Ringrazio in anticipo chiunque si prenderà il disturbo di rispondermi.

#include <iostream>

using namespace std;

int main()
{
    int N, Dividendo, Divisore, Resto, Risultato [10]= {}, J=0, i;
    cout<< "In che base vuoi lavorare? ";
    cin>> Divisore;
    cout<<"Inserisci un numero che verra' trasformato da decimale a base "<< Divisore << ": ";
    cin>> N;
    Dividendo=N;
    for (i=0;i<10;i++)
    {
        Risultato[i]=-1;
    }
    while (Dividendo!=0)
    {
       Resto=Dividendo%Divisore;
       Dividendo=(Dividendo-Resto)/Divisore;
       Risultato [J]= Resto;
        J++;
    }
    for (J=9; J>=0; J--)
    {
        if (Risultato[J]!=-1)
        cout<<Risultato[J];
    }

    return 0;
}

3 Risposte

  • Re: Trasformatore da decimale a qualsiasi base compresa tra 2 e 16

    Controlla il valore nel ciclo, se maggiore di 9 allora visualizza la lettera corrispondente all'ASCII ottenuto sommando 55 al valore stesso (con il 10 otterrai 65 che è una A è così via)
  • Re: Trasformatore da decimale a qualsiasi base compresa tra 2 e 16

    Scusa se te lo chiedo ma quale dei tre cicli?
  • Re: Trasformatore da decimale a qualsiasi base compresa tra 2 e 16

    Un altro approccio potrebbe essere il seguente:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char u[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        char v[100];
        int dim = 0;
        int n;
        int base;
        cout << "n --> ";
        cin >> n;
        cout << "base --> ";
        cin >> base;
        cout << endl << n << "(10) = ";
        do
        {
            v[dim++] = u[n % base];
        }
        while(n /= base);
        for(int i = 0; i < dim; ++i)
        {
            cout << v[dim - i - 1];
        }
        cout << "(" << base << ")" << endl;
    }
Devi accedere o registrarti per scrivere nel forum
3 risposte