fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. using namespace std;
  5.  
  6. int main() {
  7. int a, b;
  8. cin >> a >> b; // np. 2 5
  9.  
  10. cout << "0.";
  11.  
  12. int numerator = a;
  13. vector<int> digits; // cyfry rozwinięcia
  14. map<int, int> seen; // reszta -> indeks cyfry
  15. int repeat_start = -1;
  16.  
  17. int index = 0;
  18.  
  19. while (numerator != 0) {
  20. if (seen.count(numerator)) {
  21. repeat_start = seen[numerator]; // początek okresu
  22. break;
  23. }
  24.  
  25. seen[numerator] = index;
  26.  
  27. numerator *= 2;
  28. if (numerator >= b) {
  29. digits.push_back(1);
  30. numerator -= b;
  31. } else {
  32. digits.push_back(0);
  33. }
  34. index++;
  35. }
  36.  
  37. // wypisujemy wynik
  38. if (repeat_start == -1) {
  39. // brak okresu
  40. for (int d : digits) cout << d;
  41. } else {
  42. // część nieokresowa
  43. for (int i = 0; i < repeat_start; i++)
  44. cout << digits[i];
  45.  
  46. cout << "(";
  47.  
  48. // część okresowa
  49. for (int i = repeat_start; i < digits.size(); i++)
  50. cout << digits[i];
  51.  
  52. cout << ")";
  53. }
  54.  
  55. cout << endl;
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0.01s 5276KB
stdin
2 5
stdout
0.(0110)