而回路逻辑澄清+谐波级数
While loop logic clarification + harmonic series
本文关键字:回路 更新时间:2023-10-16
这是我的代码,用于查找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
)将返回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并且正在递增。。。如果您确实想要>= 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;
}
相关文章:
- Cython通过浮点数的最快方式,用于高频控制回路
- ostream_iterator 与每个回路效率
- 带有多个内部回路的循环的时间复杂性
- C 矢量化双回路
- 有效地在小环上使用OpenMP,并具有非常大的嵌套回路
- 如何从开关C++内部的回路中断开
- 如何设计控制回路
- 能量高效的自旋回路
- 双回路用于交替C++
- 而回路逻辑澄清+谐波级数
- 回路操作不正确
- 带三元回路和短路的操作员
- 回路范围的OpenMP
- 卤化物 - 而回路等效
- "Ambiguous Overload"回路中的问题和故障 CIN
- 回路体并联的最佳尺寸
- windows ce:我可以在内核模式下为PID控制回路执行所有的计算
- Opencv人脸检测回路参数
- 如何模拟具有反馈回路的数字逻辑电路
- 如何用ACE_Reactor替换WT的主回路