fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3. using int64 = long long;
  4.  
  5. int64 gcd(int64 a, int64 b) {
  6. while (b != 0) {
  7. int64 r = a % b;
  8. a = b;
  9. b = r;
  10. }
  11. return a;
  12. }
  13.  
  14. bool isPowerOfTwo(int64 n) {
  15. return n > 0 && ((n & (n - 1)) == 0);
  16. }
  17.  
  18. int main() {
  19. int64 num, den;
  20. cout << "Podaj licznik i mianownik: ";
  21. cin >> num >> den;
  22.  
  23. if (den <= 0) {
  24. cout << "Blad: mianownik musi byc dodatni\n";
  25. return 1;
  26. }
  27.  
  28. // skracanie ulamka
  29. int64 g = gcd(llabs(num), den);
  30. num /= g;
  31. den /= g;
  32.  
  33. if (!isPowerOfTwo(den)) {
  34. cout << "Mianownik nie jest potega dwojki!\n";
  35. return 1;
  36. }
  37.  
  38. cout << "Rozwiniecie binarne: 0.";
  39.  
  40. // rozwinięcie binarne
  41. while (num != 0) {
  42. num *= 2;
  43. if (num >= den) {
  44. cout << "1";
  45. num -= den;
  46. } else {
  47. cout << "0";
  48. }
  49. }
  50.  
  51. cout << endl;
  52. return 0;
  53. }
  54.  
Success #stdin #stdout 0.01s 5320KB
stdin
1 8
stdout
Podaj licznik i mianownik: Rozwiniecie binarne: 0.001