蓝桥杯 7-2求arccos值 C++算法提高 HERODING的蓝桥杯之路

资源限制
时间限制:10.0s 内存限制:256.0MB
问题描述
  利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI]。要求结果准确到小数点后5位。(PI = 3.1415926)
  提示:要达到这种程度的精度需要使用double类型。
样例输入
0.5
样例输出
0.5
1.04720

解题思路:
求arccos的过程就是求cos的逆过程,也就是x未知,cosx已知求x,那么我们可以采用二分法试出来,对未知的x进行cos与输入的值相减,如果逼近0,说明未知的x的值就是此时试出来的值,代码如下:

#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;

int main(){
	double result, l, r, x;
	cin >> x;
	l = 0;
	r = PI;
	result = (l + r) / 2;
	while(fabs(cos(result) - x) > 0.000000000001)//二分法 
	{
		if(cos(result) - x > 0){
			l = result;
		}else{
			r = result;
		}
		result = (l + r) / 2;
	}
	cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(5);//限制输出位数 
	cout << result;
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/107082709