#include <iostream>
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: ";
cin >> num >> den;
if (den <= 0) {
cout << "Blad: mianownik musi byc dodatni\n";
return 1;
}
// skracanie ulamka
int64 g = gcd(llabs(num), den);
num /= g;
den /= g;
if (!isPowerOfTwo(den)) {
cout << "Mianownik nie jest potega dwojki!\n";
return 1;
}
cout << "Rozwiniecie binarne: 0.";
// rozwinięcie binarne
while (num != 0) {
num *= 2;
if (num >= den) {
cout << "1";
num -= den;
} else {
cout << "0";
}
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBpbnQ2NCA9IGxvbmcgbG9uZzsKCmludDY0IGdjZChpbnQ2NCBhLCBpbnQ2NCBiKSB7CiAgICB3aGlsZSAoYiAhPSAwKSB7CiAgICAgICAgaW50NjQgciA9IGEgJSBiOwogICAgICAgIGEgPSBiOwogICAgICAgIGIgPSByOwogICAgfQogICAgcmV0dXJuIGE7Cn0KCmJvb2wgaXNQb3dlck9mVHdvKGludDY0IG4pIHsKICAgIHJldHVybiBuID4gMCAmJiAoKG4gJiAobiAtIDEpKSA9PSAwKTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQ2NCBudW0sIGRlbjsKICAgIGNvdXQgPDwgIlBvZGFqIGxpY3puaWsgaSBtaWFub3duaWs6ICI7CiAgICBjaW4gPj4gbnVtID4+IGRlbjsKCiAgICBpZiAoZGVuIDw9IDApIHsKICAgICAgICBjb3V0IDw8ICJCbGFkOiBtaWFub3duaWsgbXVzaSBieWMgZG9kYXRuaVxuIjsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvLyBza3JhY2FuaWUgdWxhbWthCiAgICBpbnQ2NCBnID0gZ2NkKGxsYWJzKG51bSksIGRlbik7CiAgICBudW0gLz0gZzsKICAgIGRlbiAvPSBnOwoKICAgIGlmICghaXNQb3dlck9mVHdvKGRlbikpIHsKICAgICAgICBjb3V0IDw8ICJNaWFub3duaWsgbmllIGplc3QgcG90ZWdhIGR3b2praSFcbiI7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgY291dCA8PCAiUm96d2luaWVjaWUgYmluYXJuZTogMC4iOwoKICAgIC8vIHJvendpbmnEmWNpZSBiaW5hcm5lCiAgICB3aGlsZSAobnVtICE9IDApIHsKICAgICAgICBudW0gKj0gMjsKICAgICAgICBpZiAobnVtID49IGRlbikgewogICAgICAgICAgICBjb3V0IDw8ICIxIjsKICAgICAgICAgICAgbnVtIC09IGRlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8ICIwIjsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0K