求C++高手相助:ACM题目HangOver 1003。小弟写的程序如下,运行不通过,请高手指点。。。

2024-12-04 06:25:26
推荐回答(3个)
回答1:

#include
using namespace std;
int main()
{
float lenth,s=0.00;
int n,i;
cin>>lenth;
cout< for(i=2;;i++)
{
s=s+1/(float)(i);
if(s>=lenth)
break;
}
n=i-1;
cout< system("pause");
return 0;
}

解释:将for循环里面的第一条语句做如此修改 s=s+1/(float)(i);,由于i是int型,运算1/i结果也是int型,而i是大于2的,1/i的结果始终是0,加到s=0上还是零,除非你输入负数,否则不可能得到n的值,经过强制类型转换i由int型转换为float型,1/i也为float型,故可得运算结果。
另:此循环有个极限值,length的值不宜过大(貌似10与20之间,记不清了)。

回答2:

没有编译器啊郁闷。我想问题出现在for那边:出现死循环了。因为你输入的length肯定是大于1的浮点数字,才导致出不来结果,你把lenth的值写小点就可以了比如0.51啊

回答3:

把1改成1.0就好了,不然默认转化为int型,1/i得到的结果只能是0,然后循环就卡住了!