#include <iostream>
#include <map>
using namespace std;
using int64 = long long;
int64 gcd(int64 a, int64 b) {
while (b != 0) {
int64 r = a % b;
a = b;
b = r;
}
return a;
}
bool isPowerOfTwo(int64 n) {
return n > 0 && ((n & (n - 1)) == 0);
}
int main() {
int64 num, den;
cout << "Podaj licznik i mianownik: ";
if (!(cin >> num >> den)) {
cout << "BLAD: nie wczytano danych!\n";
return 0;
}
if (den == 0) {
cout << "Blad: mianownik = 0\n";
return 0;
}
int64 g = gcd(llabs(num), llabs(den));
num /= g;
den /= g;
if (isPowerOfTwo(den)) {
cout << "Mianownik NIE moze byc potega liczby 2!\n";
return 0;
}
cout << "Rozwiniecie binarne: 0.";
map<int64, int> used;
string bits;
int64 r = llabs(num % den);
int pos = 0, start = -1;
while (r != 0) {
if (used.count(r)) {
start = used[r];
break;
}
used[r] = pos++;
r *= 2;
if (r >= den) {
bits += '1';
r -= den;
} else {
bits += '0';
}
}
if (start == -1) {
cout << bits;
} else {
for (int i = 0; i < bits.size(); i++) {
if (i == start) cout << "(";
cout << bits[i];
}
cout << ")";
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBpbnQ2NCA9IGxvbmcgbG9uZzsKCmludDY0IGdjZChpbnQ2NCBhLCBpbnQ2NCBiKSB7CiAgICB3aGlsZSAoYiAhPSAwKSB7CiAgICAgICAgaW50NjQgciA9IGEgJSBiOwogICAgICAgIGEgPSBiOwogICAgICAgIGIgPSByOwogICAgfQogICAgcmV0dXJuIGE7Cn0KCmJvb2wgaXNQb3dlck9mVHdvKGludDY0IG4pIHsKICAgIHJldHVybiBuID4gMCAmJiAoKG4gJiAobiAtIDEpKSA9PSAwKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQ2NCBudW0sIGRlbjsKCiAgICBjb3V0IDw8ICJQb2RhaiBsaWN6bmlrIGkgbWlhbm93bmlrOiAiOwogICAgaWYgKCEoY2luID4+IG51bSA+PiBkZW4pKSB7CiAgICAgICAgY291dCA8PCAiQkxBRDogbmllIHdjenl0YW5vIGRhbnljaCFcbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKGRlbiA9PSAwKSB7CiAgICAgICAgY291dCA8PCAiQmxhZDogbWlhbm93bmlrID0gMFxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpbnQ2NCBnID0gZ2NkKGxsYWJzKG51bSksIGxsYWJzKGRlbikpOwogICAgbnVtIC89IGc7CiAgICBkZW4gLz0gZzsKCiAgICBpZiAoaXNQb3dlck9mVHdvKGRlbikpIHsKICAgICAgICBjb3V0IDw8ICJNaWFub3duaWsgTklFIG1vemUgYnljIHBvdGVnYSBsaWN6YnkgMiFcbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgY291dCA8PCAiUm96d2luaWVjaWUgYmluYXJuZTogMC4iOwoKICAgIG1hcDxpbnQ2NCwgaW50PiB1c2VkOwogICAgc3RyaW5nIGJpdHM7CgogICAgaW50NjQgciA9IGxsYWJzKG51bSAlIGRlbik7CiAgICBpbnQgcG9zID0gMCwgc3RhcnQgPSAtMTsKCiAgICB3aGlsZSAociAhPSAwKSB7CiAgICAgICAgaWYgKHVzZWQuY291bnQocikpIHsKICAgICAgICAgICAgc3RhcnQgPSB1c2VkW3JdOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdXNlZFtyXSA9IHBvcysrOwogICAgICAgIHIgKj0gMjsKCiAgICAgICAgaWYgKHIgPj0gZGVuKSB7CiAgICAgICAgICAgIGJpdHMgKz0gJzEnOwogICAgICAgICAgICByIC09IGRlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiaXRzICs9ICcwJzsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHN0YXJ0ID09IC0xKSB7CiAgICAgICAgY291dCA8PCBiaXRzOwogICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgPT0gc3RhcnQpIGNvdXQgPDwgIigiOwogICAgICAgICAgICBjb3V0IDw8IGJpdHNbaV07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgIikiOwogICAgfQogICAgY291dCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==