算法提高 7-2求arccos值

算法提高 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值