用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算法-_-||
写个基于字符串处理的
代码如下
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 熟大熟小,只能用!= 即>=或<=判断
希望有所帮助