#include using namespace std; // calcule a^b int puissance(int a, int b) { int resultat = 1; for (int i=0; i<b; i++) resultat *= a; return resultat; } // calcule le log entier de n en base 'base' int log_entier(int n, int base) { int resultat = 0; while (n > 0) { resultat++; n /= base; } return resultat; } // converti 'original', de taille 'bits' bits de la // base de depart a la base d'arrivee int conversion(int original, int bits, int base_depart, int base_arrivee) { int converti = 0; int puissance_depart; int puissance_arrivee; for (int i=bits-1; i>=0; i--) { puissance_depart = puissance(base_depart, i); puissance_arrivee = puissance(base_arrivee, i); if (original / puissance_arrivee > 0) { original -= puissance_arrivee; converti += puissance_depart; } } return converti; } int main(int argc, char **argv) { const int max_bits = 10; int decimal, binaire, original, bits; cout << "Entrez un nombre entier: "; cin >> decimal; // calcul du nombre de bits de 'decimal' bits = log_entier(decimal, 2); cout << decimal << " a " << bits << " bits." << endl; if (bits > 10) { cout << "Nous ne pouvons pas convertir de nombres plus grands que " << max_bits << " bits." << endl; return 0; } // conversion en binaire binaire = conversion(decimal, bits, 10, 2); cout << decimal << " vaut '" << binaire << "' en binaire." << endl; // calcul du nombre de bits bits = log_entier(binaire, 10); cout << decimal << " a " << bits << " bits." << endl; // conversion de binaire en decimal original = conversion(binaire, bits, 2, 10); cout << "Nombre original: " << original << endl; return 0; }
Pages: 1 2