Вообще, вычисление периода дроби - очень простая операция, но у новичков может вызвать затруднения. Привожу код: // Тестовые данные: 12/13 // Ввод данных /* output Vvedite chislitel 12
vvedite znamenatel 13 drob ravna 0,923076 period raven 923076 */
#include "stdafx.h" #include "iostream.h"
// объявление переменных int m,n; int* ostatki; int* period; unsigned int len;
// проверка остатков int IsInOstatki(int ost,int len) { //len-1 чтоб не проверять остаток, ввденый на текущем шаге for(int i=0;i<len-1;i++) { if(ostatki[i]==ost) return i; } return 0; }
// Главная функция вычисления периода дроби int main(int argc, char* argv[]) { cout<<"Vvedite chislitel drobi:\r\n"; cin>>m; cout<<"\r\nvvedite znamenatel drobi:\r\n"; cin>>n; ostatki=new int[n+1]; period=new int[n+1];
int d=m,q=n; int r,pos; len=1;
do { r=d%q; ostatki[len]=r; d/=q; period[len]=d;
d=10*r; len++; } while((pos=IsInOstatki(r,len/*сколько остатков помещено в массив остатков*/))==0);
// вывод результатов cout<<"drob= \r\n"; cout<<period[1]<<","; for(r=2;r<len;r++) { cout<<period[r]; } cout<<"\r\n period= "; for(r=pos+1;r<len;r++) cout<<period[r];
cout<<"\r\n";
// освобождение ресурсов delete[] ostatki; delete[] period;
return 0; }
|