编程:s=1/1-1/(1+2)+1/(1+2+3)-1/(1+2+3+4)……+1/(1+2+……+n),循环直到某一项的值小于1.0e-6。
这个程序应该怎么写,求高人指点,谢谢!!!
这道题,其实就是观察规律。
每一项有两点:符号和分数。
符号:
项数 | 符号 |
---|---|
第 1 项 | + |
第 2 项 | - |
第 3 项 | + |
第 4 项 | - |
第 5 项 | + |
…… | …… |
所以符号是正(+)、负(-)交替。只需要设置一个变量 sign,初始值为 -1,然后每次加法求和之前,都乘以 -1,那么第 1 项就是 +1,第 2 项就是 -1,如此。
每一项是一个分数,分子永远为 1,那么就看分母了。
观察分母:
项数 | 分母 |
---|---|
第 1 项 | 1 |
第 2 项 | 1+ 2 |
第 3 项 | 1 + 2 + 3 |
第 4 项 | 1+ 2 + 3 + 4 |
…… | …… |
分母是 1+2+...+当前项的编号,也就是说分母为 (1+2+...+i)求和,如果是第 i 项的话。
停止条件为这个分数小于 1.0e-6 就行。
#include <iostream>
using namespace std;
int main() {
// 符号
int sign = -1;
// 退出循环标准
float epsilon = 1.0e-6;
// 所有项的和
float sum = 0.0;
// 循环次数
int i = 1;
// 当前项
float current = 1.0;
// 如果当前项小于设置的 epsilon,则跳出循环
while(current > epsilon)
{
// 每次加之前,需要确定符号,第一项为 “+”,第二项为 “-”,循环往复
sign *= -1;
// 累加和
sum += sign * current;
// 下一项
++i;
current = 1.0 / ((1 + i) * i / 2);
}
cout << current << endl;
cout << sum << endl;
return 0;
}
找规律 - + - + - +
求和,当和小于时跳出循环
写一个方法,专门求分母,然后写一个变量为-1,作为前面的符号,每一次算完以后就乘上-1,比如flag*=-1,这样就能实现每次都能变换符号