四种方法计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

在计算诸如此类有规律的数字时,我们通常要用到循环来进行,而像题目所给的这类计算存在规律变化的数字的问题,在循环时便要格外注意,这里我们给出四种方法解决上面的问题:

1、 pow 函数法
在面对正负循环的计算时,我们可以通过pow函数再循环时对正负进行控制,代码如下所示:

#include <iostream>
#include <cmath>
#define NUM 100
using namespace std;

int main() {
	double sum = 0.0;
	int i = 0;
	cout <<"计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值" << endl;
	for (i = 1; i <= NUM; i++) {
		sum += (pow(-1.0, i + 1) * 1 / i);
	}
	cout << "计算的结果是" << sum << endl;	
	system("pause");
	return 0;
}

通过上面的代码我们可以得到 1/1-1/2+1/3-1/4+1/5 …… +1/99-1/100 = 0.688172 ,在这里我们要注意对 sum 赋值的语句 sum += (pow(-1.0, i + 1) * 1 / i);,因为我们定义的 i 为 int 型,如果先计算 1 / i ,1 / i 得到的结果永远是1,这样便会导致计算结果出错。

2、 if 判断法
因为在上式中数字前面的符号不同,我们可观察出正负变化的规律,通过 if 来判断该使用那种符号,代码如下:

#include <iostream>
#define NUM 100
using namespace std;

int main() {
	double sum = 0.0;
	int i = 0;
	cout <<"计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值" << endl;
	for (i = 1; i <= NUM; i++) {
		if (1 == i % 2) {
			sum += 1.0 / i;
		}
		if (0 == i % 2) {
			sum -= 1.0 / i;
		}
	}
	cout << "计算的结果是" << sum << endl;
	system("pause");
	return 0;
}

当数字的分母为奇数时,前面的符号是正号,如果分母是偶数时,前面的符号是负号,发现这个规律后,上面的代码也就不难理解了。

3、 变量控制法
这种方法类似于第一种的 pow 函数法,不过前者是通过 pow 函数得出的结果控制正负号,后者我们自己定义变量的变化,来操控计算时的符号,代码如下:

#include <iostream>
#define NUM 100
using namespace std;

int main() {
	double sum = 0.0;
	int i = 0;
	cout <<"计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值" << endl;
	int num = 1;
	for (i = 1; i <= NUM; i++) {
		sum += (num * 1.0 / i);
		num = -num;
	}
	cout << "计算的结果是" << sum << endl;
	system("pause");
	return 0;
}

上面的代码,我们定义了一个 int 型的变量 num 来操控正负,从正 1 开始,每进行换一次循环,num 的符号就改变一次,以此达到解决题目需求的功能。

4、 分离累加相减法
我们将前面为正号的所有数字累加起来,再将符号为负号的数字累加起来,之后进行相减,便可得到我们需要的结果,代码如下:

#include <iostream>
#define NUM 100
using namespace std;

int main() {
	double sum = 0.0;
	int i = 0;
	cout <<"计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值" << endl;
	double sum1 = 0.0;
	double sum2 = 0.0;
	for (i = 1; i < NUM; i = i + 2) {
		sum1 += 1.0 / i;
	}
	for (i = 2; i < NUM; i = i + 2) {
		sum2 += 1.0 / i;
	}
	sum = sum1 - sum2;
	cout << "计算的结果是" << sum << endl;
	system("pause");
	return 0;
}

在这里,我们运用了加减法的交换律,将分母为奇数的数字和分母为偶数的数字分别累加起来,之后用分母为奇数的数累加起来的结果减去分母为偶数的数累加起来的结果,便得到了我们需要的结果。

这里给出的四种计算方法的思想,我认为是解决循环问题的重要思想,而在着之前我们要拥有敏锐的头脑去发现这类问题数字之间的规律,这样才可以灵活运用上面的方法解决实际问题。

猜你喜欢

转载自blog.csdn.net/qq_42440161/article/details/86670280
今日推荐