#include <iostream>
#include <string>
using namespace std;
string binaryExpansion(int p, int q) {
string result = "0.";
// q musi być potęgą 2
if ((q & (q - 1)) != 0) {
return "Blad: mianownik nie jest potega dwojki.";
}
// liczba bitów = log2(q)
int k = 0;
int t = q;
while (t > 1) {
t >>= 1;
k++;
}
for (int i = 0; i < k; i++) {
p *= 2;
if (p >= q) {
result += '1';
p -= q;
} else {
result += '0';
}
}
return result;
}
int main() {
// Zdefiniowany ułamek:
int p = 1; // licznik
int q = 16; // mianownik (potęga 2)
cout << "Ułamek: " << p << "/" << q << endl;
cout << "Rozwiniecie binarne: " << binaryExpansion(p, q) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RyaW5nIGJpbmFyeUV4cGFuc2lvbihpbnQgcCwgaW50IHEpIHsKICAgIHN0cmluZyByZXN1bHQgPSAiMC4iOwoKICAgIC8vIHEgbXVzaSBiecSHIHBvdMSZZ8SFIDIKICAgIGlmICgocSAmIChxIC0gMSkpICE9IDApIHsKICAgICAgICByZXR1cm4gIkJsYWQ6IG1pYW5vd25payBuaWUgamVzdCBwb3RlZ2EgZHdvamtpLiI7CiAgICB9CgogICAgLy8gbGljemJhIGJpdMOzdyA9IGxvZzIocSkKICAgIGludCBrID0gMDsKICAgIGludCB0ID0gcTsKICAgIHdoaWxlICh0ID4gMSkgewogICAgICAgIHQgPj49IDE7CiAgICAgICAgaysrOwogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgazsgaSsrKSB7CiAgICAgICAgcCAqPSAyOwogICAgICAgIGlmIChwID49IHEpIHsKICAgICAgICAgICAgcmVzdWx0ICs9ICcxJzsKICAgICAgICAgICAgcCAtPSBxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkgewogICAgLy8gWmRlZmluaW93YW55IHXFgmFtZWs6CiAgICBpbnQgcCA9IDE7ICAgLy8gbGljem5pawogICAgaW50IHEgPSAxNjsgICAvLyBtaWFub3duaWsgKHBvdMSZZ2EgMikKCiAgICBjb3V0IDw8ICJVxYJhbWVrOiAiIDw8IHAgPDwgIi8iIDw8IHEgPDwgZW5kbDsKICAgIGNvdXQgPDwgIlJvendpbmllY2llIGJpbmFybmU6ICIgPDwgYmluYXJ5RXhwYW5zaW9uKHAsIHEpIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K