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. // obliczamy ile bitów potrzebujemy
  22. int k = 0;
  23. unsigned long long tmp = b;
  24. while (tmp > 1) {
  25. tmp >>= 1;
  26. k++;
  27. }
  28.  
  29. // tworzenie binarnego rozwinięcia
  30. string binary = "0.";
  31.  
  32. for (int i = 0; i < k; i++) {
  33. a *= 2;
  34. if (a >= b) {
  35. binary += '1';
  36. a -= b;
  37. } else {
  38. binary += '0';
  39. }
  40. }
  41.  
  42. cout << "Rozwiniecie binarne: " << binary << endl;
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0.01s 5288KB
stdin
3 8
stdout
Podaj licznik a i mianownik b: Rozwiniecie binarne: 0.011