БлогNot. Предпериод и период дроби 1/n

Предпериод и период дроби 1/n

Что такое период и предпериод дроби?

Мне кажется, тут лучше не вот так, а по показанному ниже коду, который, к тому же, отдельно возвращает предпериод и период.

Решение предназначено для положительных значений вида 1/n, не требует выделения дополнительной памяти и применения каких-либо контейнеров. Проверено в консоли QT 5.X, но должно работать и в любой другой.

Следует учесть, что в десятичном представлении дробей с большим периодом цифры в дробной части дальше 11-го-12-го знака, конечно, будут неверны, так что "визуальная" проверка возможна только для достаточно небольших значений периода.

#include <iostream>
using namespace std;

void getPeriod (int n, int &p, int &k) {
 int q = 0;
 p = 0;
 while (n % 2 == 0) {
  p++; n /= 2;
 }
 while (n % 5 == 0) {
  q++; n /= 5;
 }
 if (p < q) p = q;
 if (n > 1) {
  q = 9; k = 1;
  while (q % n > 0) {
   k++; q = q % n * 10 + 9;
  }
 }
 else k = 0;
}

int main() {
 int tests[] = { 3, 5, 7, 23, 28, 81, 101, 151 };
  //тесты
 int n = sizeof(tests)/sizeof(tests[0]), p, k;
 for (int i=0; i<n; i++) {
  double d = 1/(double)tests[i];
  getPeriod(tests[i],p,k);
  cout.precision(p+k+3);
  cout << "1/" << tests[i] << " (" << d << "): " << p << "," << k << endl;
  //предпериод p, период k
 }
 cin.get();
 return 0;
}

30.01.2020, 15:22 [1855 просмотров]


теги: c++ числа алгоритм

К этой статье пока нет комментариев, Ваш будет первым