Предпериод и период дроби 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 просмотров]