fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. // Sprawdza czy liczba jest potęgą 2
  7. bool isPowerOfTwo(unsigned long long x) {
  8. return x && !(x & (x - 1));
  9. }
  10.  
  11. int main() {
  12. unsigned long long a, b;
  13. cout << "Podaj licznik a i mianownik b: ";
  14. cin >> a >> b;
  15.  
  16. if (!isPowerOfTwo(b)) {
  17. cout << "Mianownik nie jest potęga liczby 2!" << endl;
  18. return 1;
  19. }
  20.  
  21. if (a == 0) {
  22. cout << "0.0" << endl;
  23. return 0;
  24. }
  25.  
  26. // liczba bitów po przecinku = log2(b)
  27. int k = 0;
  28. unsigned long long t = b;
  29. while (t > 1) {
  30. t >>= 1;
  31. k++;
  32. }
  33.  
  34. string wynik = "0.";
  35.  
  36. for (int i = 0; i < k; i++) {
  37. a *= 2;
  38. if (a >= b) {
  39. wynik += '1';
  40. a -= b;
  41. } else {
  42. wynik += '0';
  43. }
  44. }
  45.  
  46. cout << "Rozwiniecie binarne: " << wynik << endl;
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0.01s 5320KB
stdin
a = 3
b = 8
stdout
Podaj licznik a i mianownik b: 0.0