用C语言求循环小数循环节 求高手指点

Lonely 2012-04-13 09:24:12
代码如下
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;
}

}
}
求指点拜谢!!
...全文
1254 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
堂积Code 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
代码如下
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)//……
[/Quote]
x-d==z 替换下,(d*10-d)==d*10{z=d*10,x=d*10}
化简下d*9==d*10
楼主想让d为零的情况下跳出么
CounterHack 2012-04-13
  • 打赏
  • 举报
回复
咋不能编辑自己的帖子呢- -

if (memcmp(num + nl - fl, num + nl - (fl << 1), fl)) {
if (ret) {
break; // 要加上这个
}
fl--;
} else {
CounterHack 2012-04-13
  • 打赏
  • 举报
回复
没看懂lz算法-_-||
写个基于字符串处理的

#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;
}
Lonely 2012-04-13
  • 打赏
  • 举报
回复
嗯,原来这样啊,懂了,谢了
Defonds 2012-04-13
  • 打赏
  • 举报
回复
if(x-d==z)//用x-z得的值判断是否等于z !!(此处循环跳不出)

为啥不用小于或者大于呢?
fzc_crystal 2012-04-13
  • 打赏
  • 举报
回复

z=d*10;//z为整形变量,思路是3=0.(3)*10
x=d*10;//x为double型,x=3.(3)
if(x-d==z)//用x-z得的值判断是否等于z !!(此处循环跳不出)


实在想不出怎么相等,出了d等于0了
nice_cxf 2012-04-13
  • 打赏
  • 举报
回复
不知道你想求什么
假定输入3.53
那么z=35,d=35.3显然不满足,然后还是一样,于是你就死循环了
CrazyAsk 2012-04-13
  • 打赏
  • 举报
回复
两者== 为false,不能满足break条件
CrazyAsk 2012-04-13
  • 打赏
  • 举报
回复

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

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

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

希望有所帮助
sundayX 2012-04-13
  • 打赏
  • 举报
回复
if(fabs(x-d-z)<0.000001)
//do something
Lonely 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
C/C++ code

if(x-d==z)//用x-z得的值判断是否等于z !!(此处循环跳不出)

为啥不用小于或者大于呢?
[/Quote]
那个咋用啊。。。?
sundayX 2012-04-13
  • 打赏
  • 举报
回复
浮点数不能直接比较相等的。
Lonely 2012-04-13
  • 打赏
  • 举报
回复
五楼的,麻烦以后加个注释,别人看起来很麻烦的
Lonely 2012-04-13
  • 打赏
  • 举报
回复
那个整型变量z不是只能存整数么?小数点后面就被舍去了,然后,用x-z,如果出现循环的话那么z==x-d,
因为是无限循环小数啊,不过,问题是就算我用有限的小数去测它都跳不出。
表达能力有限只能说这么清楚

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧