求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;
} 展开
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;
} 展开
3个回答
展开全部
#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之间,记不清了)。
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之间,记不清了)。
展开全部
没有编译器啊郁闷。我想问题出现在for那边:出现死循环了。因为你输入的length肯定是大于1的浮点数字,才导致出不来结果,你把lenth的值写小点就可以了比如0.51啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把1改成1.0就好了,不然默认转化为int型,1/i得到的结果只能是0,然后循环就卡住了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询