算法题:求一个数的三次方根

方法1:二分迭代法

#include <cstdio>
#include <iostream>
#include <algorithm>
#define eps 1e-8

using namespace std;

double n;

double fun(double mid)
{return mid*mid*mid<n?1:0;}

int main()
{
    cin>>n;
    double l=0,r=n,mid;
    if(n<0) swap(l,r);
    while(r-l>eps){              //当精度未达到1e-8即10-8时,二分逼近
        mid=(l+r)/2;
        if(fun(mid)) l=mid;     //小的话 
        else r=mid;
    }
    printf("%.6f\n",r);
}

方法二:牛顿迭代法

不断用(x,f(x))的切线来逼近

#include <iostream>
#include <cstdio>
using namespace std;

int mabs(int a)
{
    if(a<0) a=-a;
    return a;
}
double sqrt(double c) 
{ 
   double err = 1e-8; //设立精度
   double t = c; 
   while (mabs(c - t*t*t) > err)  t =t-(t*t*t-c)/(3.000*t*t); //三次方的递推公式
   return t; 
}
int main()
{
        int n;
        cin>>n;
    printf("%.6lf",sqrt(n));
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值