求两个数的商,如果是循环小数则把循环部分用括号括起来精确到小数点后100位
#include<stdio.h>
#include<string.h>
main()
{
int s[100];
void Xunhuan(int *,int);
int i=0,k=0,m=-1,a,b;
for(k=0;k<100;k++)
s[k]=0;
scanf("%d%d",&a,&b);
printf("%d/%d=%d.",a,b,a/b);
m=a%b;
while(m!=0&&i<98)
{
while(m<b)
{
m*=10;
if(m<b)
{
s[i]=0;
i=i+1;
}
}
s[i]=m/b;
a=m;
m=a%b;
i++;
}
if(i==0)
printf("%d",i);
else
Xunhuan(s,i);
getch();
}
void Xunhuan(int *p,int s_len)
{
int i,j,k,c,mark=0,star=0,len=0;
for(k=1;k<=s_len/2;k++) /*控制循环字符串的长度*/
{
for(i=0;i<=s_len-k;i++)/*得到循环字符串,并往下比较*/
{
for(j=i+k;j<(s_len-(s_len-j)%k);j+=k)/*比较后面字符是否为循环字符串*/
{
for(c=0;c<k;c++)/*循环字符段的比较*/
{
if(*(p+i+c)==*(p+j+c))
{
mark=1;
star=i;
len=k;
}
else
{
mark=0;
break;
}
}
if(mark==0)
break;
}
if(mark==1)
break;
}
if(mark==1)
break;
}
if(mark==0)
for(i=0;i<s_len;i++)
printf("%d",*(p+i));
else
{
if(star>1)
for(i=0;i<star;i++)
printf("%d",*(p+i));
if(mark==1)
{
printf("(");
for(i=star;i<star+len;i++)
printf("%d",*(p+i));
printf(")");
}
}
}