Вычисляем период дроби
Прислал:: Селин
Дмитрий
Иногда в
форумах возникает вопрос по поводу вычисления
периода дроби. Операция конечно проста до
безобразия, но думаю, что она имеет право на жизнь
в виде 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;
}
|