#include <iostream>
#include <map>
using namespace std;
// funkcja sprawdzająca, czy liczba jest potęgą 2
bool isPowerOfTwo(int n) {
return (n > 0) && ((n & (n - 1)) == 0);
}
int main() {
int a, b;
cout << "Podaj licznik i mianownik: ";
cin >> a >> b;
if (a >= b) {
cout << "Ułamek nie jest właściwy!\n";
return 0;
}
if (isPowerOfTwo(b)) {
// przypadek a) mianownik = potęga 2 → rozwinięcie skończone
cout << "Rozwiniecie binarne (mianownik potega 2): 0.";
while (a > 0) {
a *= 2;
if (a >= b) {
cout << '1';
a -= b;
} else {
cout << '0';
}
}
cout << endl;
} else {
// przypadek b) mianownik nie jest potęga 2 → rozwinięcie okresowe
cout << "Rozwiniecie binarne (mianownik nie potega 2): 0.";
map<int,int> seen;
string result = "";
int pos = 0;
int r = a;
while (true) {
if (r == 0) {
cout << result << endl;
break;
}
if (seen.count(r)) {
int start = seen[r];
cout << result.substr(0,start) << "(" << result.substr(start) << ")" << endl;
break;
}
seen[r] = pos++;
r *= 2;
if (r >= b) {
result += '1';
r -= b;
} else {
result += '0';
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gZnVua2NqYSBzcHJhd2R6YWrEhWNhLCBjenkgbGljemJhIGplc3QgcG90xJlnxIUgMgpib29sIGlzUG93ZXJPZlR3byhpbnQgbikgewogICAgcmV0dXJuIChuID4gMCkgJiYgKChuICYgKG4gLSAxKSkgPT0gMCk7Cn0KCmludCBtYWluKCkgewogICAgaW50IGEsIGI7CiAgICBjb3V0IDw8ICJQb2RhaiBsaWN6bmlrIGkgbWlhbm93bmlrOiAiOwogICAgY2luID4+IGEgPj4gYjsKCiAgICBpZiAoYSA+PSBiKSB7CiAgICAgICAgY291dCA8PCAiVcWCYW1layBuaWUgamVzdCB3xYJhxZtjaXd5IVxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoaXNQb3dlck9mVHdvKGIpKSB7CiAgICAgICAgLy8gcHJ6eXBhZGVrIGEpIG1pYW5vd25payA9IHBvdMSZZ2EgMiDihpIgcm96d2luacSZY2llIHNrb8WEY3pvbmUKICAgICAgICBjb3V0IDw8ICJSb3p3aW5pZWNpZSBiaW5hcm5lIChtaWFub3duaWsgcG90ZWdhIDIpOiAwLiI7CiAgICAgICAgd2hpbGUgKGEgPiAwKSB7CiAgICAgICAgICAgIGEgKj0gMjsKICAgICAgICAgICAgaWYgKGEgPj0gYikgewogICAgICAgICAgICAgICAgY291dCA8PCAnMSc7CiAgICAgICAgICAgICAgICBhIC09IGI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICcwJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICB9IGVsc2UgewogICAgICAgIC8vIHByenlwYWRlayBiKSBtaWFub3duaWsgbmllIGplc3QgcG90xJlnYSAyIOKGkiByb3p3aW5pxJljaWUgb2tyZXNvd2UKICAgICAgICBjb3V0IDw8ICJSb3p3aW5pZWNpZSBiaW5hcm5lIChtaWFub3duaWsgbmllIHBvdGVnYSAyKTogMC4iOwogICAgICAgIG1hcDxpbnQsaW50PiBzZWVuOwogICAgICAgIHN0cmluZyByZXN1bHQgPSAiIjsKICAgICAgICBpbnQgcG9zID0gMDsKICAgICAgICBpbnQgciA9IGE7CgogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGlmIChyID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgcmVzdWx0IDw8IGVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2Vlbi5jb3VudChyKSkgewogICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc2VlbltyXTsKICAgICAgICAgICAgICAgIGNvdXQgPDwgcmVzdWx0LnN1YnN0cigwLHN0YXJ0KSA8PCAiKCIgPDwgcmVzdWx0LnN1YnN0cihzdGFydCkgPDwgIikiIDw8IGVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZWVuW3JdID0gcG9zKys7CiAgICAgICAgICAgIHIgKj0gMjsKICAgICAgICAgICAgaWYgKHIgPj0gYikgewogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcxJzsKICAgICAgICAgICAgICAgIHIgLT0gYjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K