15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Вычисляем период дроби

Прислал:: Селин Дмитрий

Иногда в форумах возникает вопрос по поводу вычисления периода дроби. Операция конечно проста до безобразия, но думаю, что она имеет право на жизнь в виде FAQ.

//тестовые данные: 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)
{
for(int i=0;i<len-1;i++)//len-1 чтоб не проверять остаток, ввденый на
текущем шаге
{
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 ravna\r\n";
cout<<period[1]<<",";
for(r=2;r<len;r++)
{
cout<<period[r];
}
cout<<"\r\n period raven ";
for(r=pos+1;r<len;r++)
cout<<period[r];

cout<<"\r\n";
delete[] ostatki;
delete[] period;
return 0;
}