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