#include <iostream>
using namespace std;
int main()
{
int m,n,i;
while ((cin>>m>>n))
{
int a[10000]= {0},b[10000]= {0};
int k,cycle,k1,flag=0;
k=m%n;
k1=m/n;
cout<<m<<"/"<<n<<" = "<<k1<<".";
if(k==0)
{
cout<<"(0)"<<endl;
cycle=1;
}
else
{
int i1,i2;
for(i=1; i<10000; i++)
{
k=m%n;
m=10*k;
k1=m/n;
b[i]=k1;
a[i]=m;
for(i1=1; i1<i; i1++)
{
if(a[i]==a[i1])
{
cycle=i-i1;
flag=1;
break;
}
}
if(flag==1)
break;
}
for(i2=1; i2<=i1-1; i2++)
cout<<b[i2];
cout<<"(";
if(cycle<=50)
for(i2=i1; i2<=i1+cycle-1; i2++)
cout<<b[i2];
else
{
for(i2=i1; i2<=i1+50-1; i2++)
cout<<b[i2];
cout<<"...";
}
cout<<")\n";
}
cout<<" "<<cycle<<" = number of digits in repeating cycle\n\n";
}
return 0;
}
错误分析:当1/2999会产生1300位多的小数,会造成原本只有1000位的数组超标,因此改进为10000位
转载请注明原文地址: https://ju.6miu.com/read-1802.html