fork(1) download
  1. #include <iostream>
  2. #include <map>
  3. using namespace std;
  4.  
  5. // funkcja sprawdzająca, czy liczba jest potęgą 2
  6. bool isPowerOfTwo(int n) {
  7. return (n > 0) && ((n & (n - 1)) == 0);
  8. }
  9.  
  10. int main() {
  11. int a, b;
  12. cout << "Podaj licznik i mianownik: ";
  13. cin >> a >> b;
  14.  
  15. if (a >= b) {
  16. cout << "Ułamek nie jest właściwy!\n";
  17. return 0;
  18. }
  19.  
  20. if (isPowerOfTwo(b)) {
  21. // przypadek a) mianownik = potęga 2 → rozwinięcie skończone
  22. cout << "Rozwiniecie binarne (mianownik potega 2): 0.";
  23. while (a > 0) {
  24. a *= 2;
  25. if (a >= b) {
  26. cout << '1';
  27. a -= b;
  28. } else {
  29. cout << '0';
  30. }
  31. }
  32. cout << endl;
  33. } else {
  34. // przypadek b) mianownik nie jest potęga 2 → rozwinięcie okresowe
  35. cout << "Rozwiniecie binarne (mianownik nie potega 2): 0.";
  36. map<int,int> seen;
  37. string result = "";
  38. int pos = 0;
  39. int r = a;
  40.  
  41. while (true) {
  42. if (r == 0) {
  43. cout << result << endl;
  44. break;
  45. }
  46. if (seen.count(r)) {
  47. int start = seen[r];
  48. cout << result.substr(0,start) << "(" << result.substr(start) << ")" << endl;
  49. break;
  50. }
  51. seen[r] = pos++;
  52. r *= 2;
  53. if (r >= b) {
  54. result += '1';
  55. r -= b;
  56. } else {
  57. result += '0';
  58. }
  59. }
  60. }
  61.  
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Podaj licznik i mianownik: Ułamek nie jest właściwy!