while循环逻辑澄清+调和级数
While loop logic clarification + harmonic series
这是我的代码,用于计算 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;
}
你的循环实际上是运行。但是,您的 sum
变量是 int
类型,divisor
.
也是
1(一个 int
)/除数(也是一个 int
)将 return 1 或 0。这是因为你正在进行整数除法。 1/1 == 1
。但是,1/2 == 0
、1/3 == 0
等...要解决此问题,请将除数转换为 double:
(1 / (double)divisor)
这样就解决了该段 return 仅 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 并且正在递增...如果您确实想要一个总和>= 15
,将while
条件改为...
while (sum < 15)
您的代码应如下所示...
#include <iostream>
using namespace std;
int main()
{
int divisor = 1;
double sum = 0; //Changed the type to double and assigned 0 rather than 1
while (sum <= 15) //While condition shortened...
{
sum = sum + (1 / (double)divisor); //Added type cast to divisor
divisor++;
}
//cout statement adjusted...
cout << "You need " << divisor << " terms to get a sum > 15" << endl;
return 0;
}
这是我的代码,用于计算 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;
}
你的循环实际上是运行。但是,您的 sum
变量是 int
类型,divisor
.
1(一个 int
)/除数(也是一个 int
)将 return 1 或 0。这是因为你正在进行整数除法。 1/1 == 1
。但是,1/2 == 0
、1/3 == 0
等...要解决此问题,请将除数转换为 double:
(1 / (double)divisor)
这样就解决了该段 return 仅 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 并且正在递增...如果您确实想要一个总和>= 15
,将while
条件改为...
while (sum < 15)
您的代码应如下所示...
#include <iostream>
using namespace std;
int main()
{
int divisor = 1;
double sum = 0; //Changed the type to double and assigned 0 rather than 1
while (sum <= 15) //While condition shortened...
{
sum = sum + (1 / (double)divisor); //Added type cast to divisor
divisor++;
}
//cout statement adjusted...
cout << "You need " << divisor << " terms to get a sum > 15" << endl;
return 0;
}