用C语言求循环小数循环节 求

用C语言求循环小数循环节 求高手指点
代码如下
int main()
{
  int z,i;
  double d,x;
  scanf("%lf",&d);//输入循环小数
  i=0;
  {
  for(;;)
  {
  i++;//运算次数
  z=d*10;//z为整形变量,思路是3=0.(3)*10
  x=d*10;//x为double型,x=3.(3)
  if(x-d==z)//用x-z得的值判断是否等于z !!(此处循环跳不出)
  break;
  }

  }
}
求指点拜谢!!

------解决方案--------------------
没看懂lz算法-_-||
写个基于字符串处理的
C/C++ code

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char num[128];
    int nl, fl, ret = 0;
    if (!*gets(num)) {
        printf("input error!\n");
        return -1;
    }
    nl = strlen(num);
    for (fl = nl >> 1; fl; ) {
        if (memcmp(num + nl - fl, num + nl - (fl << 1), fl)) {
            fl--;
        } else {
            ret = fl;
            if (fl & 1) {
                break;
            }
            fl >>= 1;
        }
    }
    if (!ret) {
        printf("no factor found!\n");
        return -2;
    }
    printf("factor is: %s", num + nl - ret);
    return 0;
}

------解决方案--------------------
if(fabs(x-d-z)<0.000001)
//do something
------解决方案--------------------

1。int Z 类型提升到了double,已不再是int 

2。float。 double.本身是个精度数,是个约数。如double pi=3.14; 

3。两个约数不能判等, 3.1415 3.1415926 熟大熟小,只能用!= 即>=或<=判断

希望有所帮助