题目链接:https://vjudge.net/problem/UVA-202
题解:找循环数的题
循环的本质是余数一样,所以只要判断是否与前面的余数相同即可
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int digit[10000];
int yu[10000];
int num;//小数的位数
int zheng;
int n,m;//除数,被除数
while(cin>>n>>m)
{
zheng=n/m;
int nn=n;
int beginn;//循环开始的地方
num=-1;
for(;;)
{
num++;
int fl=0;
int k=nn%m;//余数
int t=nn/m;//商
digit[num]=t;
yu[num]=k;
for(int i=0; i<num; i++)
if(yu[i]==k)
{
beginn=i;
fl=1;
break;
}
if(fl)
break;
nn=nn-t*m;
nn*=10;
}
cout<<n<<"/"<<m<<" = "<<zheng<<".";
for(int i=1;i<=beginn;i++)
cout<<digit[i];
cout<<"(";
for(int i=beginn+1;i<=num;i++)
{
cout<<digit[i];
if(i==50)
{
cout<<"...";
break;
}
}
cout<<")"<<endl;
cout<<" "<<num-beginn<<" = number of digits in repeating cycle"<<endl;
cout<<endl;
}
return 0;
}