算法提高 7-2求arccos值

来源:互联网 发布:js点击加号输入框加一 编辑:程序博客网 时间:2024/06/05 04:39
算法提高 7-2求arccos值  

时间限制:10.0s 内存限制:256.0MB
提交此题
问题描述
  利用标准库中的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。

原本以为这是一道水题,用了暴力法,然后从0开始,因为看到题目后面说精度要达到小数点后五位,于是我把第增量尽可能小,每次增加0.000001,然后在while循环中用fabs函数判断该数的cos值是否和输入的值相近,如果是,则可以认为这时候已经遍历到正确值附近,输出!
到这里一切都看似很正常对吧?可是当我提交到lanqiao练习系统时,发现只有33分,于是我在键入其他数据进行测试,发现只有输入0.5时候,结果是相符的,如果输入-1,得出来的是3.14018,而题目中提供的PI是3.1415926,正确应该输出3.14018。下面我贴出我原来这道题的代码,至今我想不明白,我代码中哪个地方出错了,如果有哪位大神看的出来,麻烦指示以下!

#include<iostream>#include<math.h>#include<cstdlib>#include<iomanip>using namespace std;int main(){double x;cin>>x;double i=0;while(fabs(cos(i)-x)>0.000001){        i+=0.000001;}cout<<fixed<<setprecision(5)<<i;return 0; }  //-1 //3.14018

然后我Google了一下,发现别人的做法出乎意料的简便,直接无视题目中的cos函数和fabs函数,直接使用标准库中的acos函数去求,惊呆了,像我们这种孤陋寡闻的,都不知道标准库中有这么方便的函数,还傻乎乎的被题目骗去使用cos函数,我觉得这其实像是一种作弊,或许叫做小技巧。话不多说,贴出这段代码出来。

#include<stdio.h>#include<math.h>int main(){    double x;    scanf("%lf",&x);    printf("%.5lf",acos(x));}

看了这份代码,我觉得我有两点收获是:

  1. 要了解Math.h中基本函数的用法,不懂得使用就吃亏了,C 标准库- <math.h>
  2. C语言有比c++函数有一个很大优势就是在输入和输出方面,可以很便捷的进行输入输出格式化控制,比如你想输出一个双精度的小数点后五位,您可以printf(“%.5lf”,a);当然我这么说只是很浅显的说法,更加详细可以参考这篇文章:C语言输出函数(printf)和输入函数(scanf)
原创粉丝点击