#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
string binaryExpansionRepeating(int p, int q) {
string result = "0.";
unordered_map<int, int> pos; // zapamiętuje, na której pozycji pojawiła się dana reszta
string fractional = "";
int index = 0;
while (true) {
// Jeśli reszta się powtórzyła -> mamy okres
if (pos.count(p) > 0) {
int start = pos[p];
// wstawiamy nawiasy oznaczające okres
return "0." + fractional.substr(0, start) + "(" +
fractional.substr(start) + ")";
}
pos[p] = index;
p *= 2;
if (p >= q) {
fractional += '1';
p -= q;
} else {
fractional += '0';
}
index++;
// jeśli reszta = 0 → rozwinięcie się kończy (nieskończone nie będzie)
if (p == 0) {
return "0." + fractional;
}
}
}
int main() {
// zdefiniowany ułamek 3/11
int p = 3;
int q = 11;
cout << "Ułamek: " << p << "/" << q << endl;
cout << "Rozwiniecie binarne: " << binaryExpansionRepeating(p, q) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBiaW5hcnlFeHBhbnNpb25SZXBlYXRpbmcoaW50IHAsIGludCBxKSB7CiAgICBzdHJpbmcgcmVzdWx0ID0gIjAuIjsKCiAgICB1bm9yZGVyZWRfbWFwPGludCwgaW50PiBwb3M7ICAvLyB6YXBhbWnEmXR1amUsIG5hIGt0w7NyZWogcG96eWNqaSBwb2phd2nFgmEgc2nEmSBkYW5hIHJlc3p0YQogICAgc3RyaW5nIGZyYWN0aW9uYWwgPSAiIjsKCiAgICBpbnQgaW5kZXggPSAwOwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgLy8gSmXFm2xpIHJlc3p0YSBzacSZIHBvd3TDs3J6ecWCYSAtPiBtYW15IG9rcmVzCiAgICAgICAgaWYgKHBvcy5jb3VudChwKSA+IDApIHsKICAgICAgICAgICAgaW50IHN0YXJ0ID0gcG9zW3BdOwogICAgICAgICAgICAvLyB3c3Rhd2lhbXkgbmF3aWFzeSBvem5hY3phasSFY2Ugb2tyZXMKICAgICAgICAgICAgcmV0dXJuICIwLiIgKyBmcmFjdGlvbmFsLnN1YnN0cigwLCBzdGFydCkgKyAiKCIgKwogICAgICAgICAgICAgICAgICAgZnJhY3Rpb25hbC5zdWJzdHIoc3RhcnQpICsgIikiOwogICAgICAgIH0KCiAgICAgICAgcG9zW3BdID0gaW5kZXg7CgogICAgICAgIHAgKj0gMjsKCiAgICAgICAgaWYgKHAgPj0gcSkgewogICAgICAgICAgICBmcmFjdGlvbmFsICs9ICcxJzsKICAgICAgICAgICAgcCAtPSBxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZyYWN0aW9uYWwgKz0gJzAnOwogICAgICAgIH0KCiAgICAgICAgaW5kZXgrKzsKCiAgICAgICAgLy8gamXFm2xpIHJlc3p0YSA9IDAg4oaSIHJvendpbmnEmWNpZSBzacSZIGtvxYRjenkgKG5pZXNrb8WEY3pvbmUgbmllIGLEmWR6aWUpCiAgICAgICAgaWYgKHAgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gIjAuIiArIGZyYWN0aW9uYWw7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIHpkZWZpbmlvd2FueSB1xYJhbWVrIDMvMTEKICAgIGludCBwID0gMzsKICAgIGludCBxID0gMTE7CgogICAgY291dCA8PCAiVcWCYW1lazogIiA8PCBwIDw8ICIvIiA8PCBxIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJSb3p3aW5pZWNpZSBiaW5hcm5lOiAiIDw8IGJpbmFyeUV4cGFuc2lvblJlcGVhdGluZyhwLCBxKSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==