Konwersja systemów liczbowych

Transkrypt

Konwersja systemów liczbowych
Konwersja systemów liczbowych
Program ma pobrać z klawiatury dwie liczby naturalne:
• n - liczbę w reprezentacji dziesiętnej,
• p - podstawę nowego systemu liczbowego p
a następnie wyznaczyć reprezentację liczby n w systemie o podstawie p, jako łańcuch znaków: „cyfr”.
W reprezentacji liczby w systemie o podstawie p występuje p różnych cyfr, o wartościach od 0 do p-1.
Dla p>10 stosuje się kolejne duże litery alfabetu na oznaczenie wartości liczbowej cyfr większych od 9:
‘A’=10, ’B’=11 itd.
int n;
int p;
string b = "";
int r;
//
//
//
//
liczba w reprezentacji dziesietnej
podstawa nowego systemu liczbowego
wynik, reprezentacja liczby n w systemie o podstawie p
reszta z dzielenia n przez p
cout << "Daj liczbe o podstawie dziesietnej n = ";
cin >> n;
cout << "Na jaka podstawe przeliczyc ? p = ";
cin >> p;
while (n>0) {
r = n%p;
if (r<10)
b = (char)(r+48)+b;
else
b = (char)(r+55)+b;
n = n/p;
}
cout << "b = " << b << endl;
// powtarzaj dzielenie n/p i zbieraj reszty:
// reszta z dzielenia n przez p
// cyfra jest z zakresu 0-9
// cyfra z zakresu > 9, wymaga litery
// wynik dzielenia całkowitego n przez p
cout << "\n A teraz z powrotem na system dziesietny:\n";
n = 0;
int waga = 1;
for (int i=b.length()-1; i>=0; i--) {
if (b[i]<='9')
n = n+waga*(b[i]-48); // cyfra
else
n = n+waga*(b[i]-55); // litera
waga = waga*p;
}
cout << "n = " << n << endl;
cout << "\n albo prosciej:\n";
n = 0;
for (int i=0; i<b.length(); i++)
if (b[i]<='9')
n = n*p+(b[i]-48); // cyfra
else
n = n*p+(b[i]-55); // litera
cout << "n = " << n << endl;
Uwaga: konwersję z systemu dziesiętnego na dowolny <2,36> umożliwia też funkcja niestandardowa itoa.

Podobne dokumenty