问题描述
利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI]。要求结果准确到小数点后5位。(PI = 3.1415926)
提示:要达到这种程度的精度需要使用double类型。
样例输入
0.5
样例输出
数据规模和约定
-1 <= x <= 1, 0 <= arccos(x) <= PI。
分析:二分逼近,求答案,精确到小数点后6位即可~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <cmath> using namespace std; #define PI 3.1415926 #define min 0.000001 double x; double arccos(double l, double r) { if (r - l < min) return l; double mid = (l + r) / 2; if (cos(mid) == x) return mid; else if (cos(mid) > x) return arccos(mid, r); else return arccos(l, mid); } int main() { cin >> x; printf("%.5f", arccos(0, PI)); return 0; } |
❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼