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

#include<iostream>usingnamespacestd;intmain(){floatlenth,s=0.00;intn,i;cin>>lenth;for... #include<iostream>
using namespace std;
int main()
{
float lenth,s=0.00;
int n,i;
cin>>lenth;
for(i=2;;i++)
{
s=s+1/i;
if (s>=lenth)
break;
}
n=i-1;
cout<<n<<endl;
system("pause");
return 0;
}
展开
 我来答
saminigod
2012-09-28 · TA获得超过503个赞
知道小有建树答主
回答量:369
采纳率:0%
帮助的人:114万
展开全部
#include<iostream>
using namespace std;
int main()
{
float lenth,s=0.00;
int n,i;
cin>>lenth;
cout<<endl;
for(i=2;;i++)
{
s=s+1/(float)(i);
if(s>=lenth)
break;
}
n=i-1;
cout<<n<<endl;
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之间,记不清了)。
LG_MYlove
2012-09-28 · TA获得超过647个赞
知道小有建树答主
回答量:234
采纳率:93%
帮助的人:210万
展开全部
没有编译器啊郁闷。我想问题出现在for那边:出现死循环了。因为你输入的length肯定是大于1的浮点数字,才导致出不来结果,你把lenth的值写小点就可以了比如0.51啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友55a4422
2012-09-28 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:113万
展开全部
把1改成1.0就好了,不然默认转化为int型,1/i得到的结果只能是0,然后循环就卡住了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式