fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. // Funkcja robiąca rozwinięcie binarne ułamka p/q,
  6. // gdzie q = 2^k
  7. string binaryExpansion(int p, int q) {
  8. string result = "0.";
  9.  
  10. // Sprawdzenie czy q jest potęgą dwójki
  11. if ((q & (q - 1)) != 0) {
  12. return "Blad: mianownik nie jest potega dwojki.";
  13. }
  14.  
  15. int k = 0;
  16. int tmp = q;
  17. while (tmp > 1) {
  18. tmp >>= 1;
  19. k++;
  20. }
  21.  
  22. for (int i = 0; i < k; ++i) {
  23. p *= 2;
  24. if (p >= q) {
  25. result += '1';
  26. p -= q;
  27. } else {
  28. result += '0';
  29. }
  30. }
  31.  
  32. return result;
  33. }
  34.  
  35. int main() {
  36. int p, q;
  37. cout << "Podaj licznik p: ";
  38. cin >> p;
  39. cout << "Podaj mianownik q (potega 2): ";
  40. cin >> q;
  41.  
  42. cout << "Rozwiniecie binarne: " << binaryExpansion(p, q) << endl;
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
Podaj licznik p: Podaj mianownik q (potega 2): Rozwiniecie binarne: 0.