这是我找到1 / n谐波系列之和的代码。我希望它在总和大于或等于15时停止,但代码无法运行。任何人都可以让我知道我做错了什么?它似乎遵循正确的while循环结构。谢谢!
#include <iostream>
using namespace std;
int main ()
{
int divisor = 1;
int sum = 1;
while ((sum <= 15) && (divisor >=1))
{
sum = sum + (1/divisor);
divisor++;
}
cout << "You need " << divisor << " terms to get a sum <= 15" << endl;
return 0;
}
答案 0 :(得分:4)
您的循环实际上正在运行。但是,您的sum
变量的类型为int
,divisor
也是。{/ p>
1(int
)/除数(也是int
)将返回1或0.这是因为您正在进行整数除法。 1/1 == 1
。但是,1/2 == 0
,1/3 == 0
等......要解决此问题,请将除数加倍:
(1 / (double)divisor)
这样就解决了该段仅返回1或0的问题。但是,sum
类型为int
时,您仍然会获得1的总和。尝试将double
分配给int
变量将导致截断或舍入舍入。 Sum将添加第一个1
,但在此之后它将无限期地保持1
。要解决此问题,请将sum
的类型更改为double
。
您对sum = 1;
的分配是一个逻辑错误。你的结果将比它应该高1。你的输出声明也是错误的...应该是......
cout << "You need " << divisor << " terms to get a sum > 15" << endl;
此外,divisor >= 1
的条件是不必要的...它总是大于或等于1,因为你将它指定为1并且正在递增...如果你确实想要一个{{{ 1}},将>= 15
条件更改为...
while
您的代码应如下所示......
while (sum < 15)