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.