循环节有很长的,例如:
1/9997=0.0001000300090027008102430729218765629688906672001600480144043 212963889166750025007502250675202560768230469140742222666800040012003 60108032409722916875062518755626688006401920576172851855556667,长度是 192
贴代码:
#include
#define mn 1000
void main()
{
int i,m,n,r,t;
int p[mn],q[mn];
for(i=0;i
{
p[i]=-1;
q[i]=0;
}
printf("input :m,n(0<=m
scanf("%d%d",&m,&n);
t=0; //初始化值
r=m; //把被除数赋给r
while(r!=0&&(p[r]==-1)) //循环条件当r不为0且p[r]=-1时执行循环体
{
p[r]=t; //余数r第一次出现的位置
r=10*r; //把被除数扩大10倍,以至于取第一个小数
t++;
q[t]=r/n; //计算小数点后t位的值:取整,即为m/n的小数从小数点开始逐个取出放到数组q中
r=r%n; //算完一位就去掉一位,即取余对n
}
printf("m/n = 0."); //因为m
if (r!=0) //被除数不为0就执行以下语句
{
for(i=1;i<=p[r];i++) //输出循环小数中前面非循环的部分
printf("%d",q[i]);
printf("("); //输出循环的小数放在括号中
for(i=p[r]+1;i<=t;i++)
printf("%d",q[i]);
printf(")");
}
else //被除数为0的情况
for(i=1;i<=t;i++) //输出不循环的小数
printf("%d",q[i]);
printf("/n");
}
参考: