📜  求一个数的三次方根

📅  最后修改于: 2021-09-16 11:09:25             🧑  作者: Mango

给定一个数 n,求 n 的立方根。
例子:

Input:  n = 3
Output: Cubic Root is 1.442250

Input: n = 8
Output: Cubic Root is 2.000000

我们可以使用二分查找。首先我们定义错误 e。在我们的例子中,让我们说 0.0000001。我们计算数字 n 的三次根的算法的主要步骤是:

  1. 初始化 start = 0 和 end = n
  2. 计算 mid = (start + end)/2
  3. 检查 (n – mid*mid*mid) 的绝对值是否 < e。如果这个条件成立,那么 mid 就是我们的答案,所以返回 mid。
  4. 如果 (mid*mid*mid)>n 然后设置 end=mid
  5. 如果 (mid*mid*mid)

下面是上述想法的实现。

C++
// C++ program to find cubic root of a number
// using Binary Search
#include 
using namespace std;
 
// Returns the absolute value of n-mid*mid*mid
double diff(double n,double mid)
{
    if (n > (mid*mid*mid))
        return (n-(mid*mid*mid));
    else
        return ((mid*mid*mid) - n);
}
 
// Returns cube root of a no n
double cubicRoot(double n)
{
    // Set start and end for binary search
    double start = 0, end = n;
 
    // Set precision
    double e = 0.0000001;
 
    while (true)
    {
        double mid = (start + end)/2;
        double error = diff(n, mid);
 
        // If error is less than e then mid is
        // our answer so return mid
        if (error <= e)
            return mid;
 
        // If mid*mid*mid is greater than n set
        // end = mid
        if ((mid*mid*mid) > n)
            end = mid;
 
        // If mid*mid*mid is less than n set
        // start = mid
        else
            start = mid;
    }
}
 
// Driver code
int main()
{
    double n = 3;
    printf("Cubic root of %lf is %lf\n",
           n, cubicRoot(n));
    return 0;
}


Java
// Java program to find cubic root of a number
// using Binary Search
import java.io.*;
 
class GFG
{
    // Returns the absolute value of n-mid*mid*mid
    static double diff(double n,double mid)
    {
        if (n > (mid*mid*mid))
            return (n-(mid*mid*mid));
        else
            return ((mid*mid*mid) - n);
    }
     
    // Returns cube root of a no n
    static double cubicRoot(double n)
    {
        // Set start and end for binary search
        double start = 0, end = n;
  
        // Set precision
        double e = 0.0000001;
  
        while (true)
        {
            double mid = (start + end)/2;
            double error = diff(n, mid);
  
            // If error is less than e then mid is
            // our answer so return mid
            if (error <= e)
                return mid;
  
            // If mid*mid*mid is greater than n set
            // end = mid
            if ((mid*mid*mid) > n)
                end = mid;
  
            // If mid*mid*mid is less than n set
            // start = mid
            else
                start = mid;
        }
    }
     
    // Driver program to test above function
    public static void main (String[] args)
    {
        double n = 3;
        System.out.println("Cube root of "+n+" is "+cubicRoot(n));
    }
}
 
// This code is contributed by Pramod Kumar


Python3
# Python 3 program to find cubic root
# of a number using Binary Search
 
# Returns the absolute value of
# n-mid*mid*mid
def diff(n, mid) :
    if (n > (mid * mid * mid)) :
        return (n - (mid * mid * mid))
    else :
        return ((mid * mid * mid) - n)
         
# Returns cube root of a no n
def cubicRoot(n) :
     
    # Set start and end for binary
    # search
    start = 0
    end = n
     
    # Set precision
    e = 0.0000001
    while (True) :
         
        mid = (start + end) / 2
        error = diff(n, mid)
 
        # If error is less than e
        # then mid is our answer
        # so return mid
        if (error <= e) :
            return mid
             
        # If mid*mid*mid is greater
        # than n set end = mid
        if ((mid * mid * mid) > n) :
            end = mid
             
        # If mid*mid*mid is less
        # than n set start = mid
        else :
            start = mid
             
# Driver code
n = 3
print("Cubic root of", n, "is",
      round(cubicRoot(n),6))
 
 
# This code is contributed by Nikita Tiwari.


C#
// C# program to find cubic root
// of a number using Binary Search
using System;
 
class GFG {
     
    // Returns the absolute value
    // of n - mid * mid * mid
    static double diff(double n, double mid)
    {
        if (n > (mid * mid * mid))
            return (n-(mid * mid * mid));
        else
            return ((mid * mid * mid) - n);
    }
     
    // Returns cube root of a no. n
    static double cubicRoot(double n)
    {
         
        // Set start and end for
        // binary search
        double start = 0, end = n;
 
        // Set precision
        double e = 0.0000001;
 
        while (true)
        {
            double mid = (start + end) / 2;
            double error = diff(n, mid);
 
            // If error is less than e then
            // mid is our answer so return mid
            if (error <= e)
                return mid;
 
            // If mid * mid * mid is greater
            // than n set end = mid
            if ((mid * mid * mid) > n)
                end = mid;
 
            // If mid*mid*mid is less than
            // n set start = mid
            else
                start = mid;
        }
    }
     
    // Driver Code
    public static void Main ()
    {
        double n = 3;
        Console.Write("Cube root of "+ n
                       + " is "+cubicRoot(n));
    }
}
 
// This code is contributed by nitin mittal.


PHP
 ($mid * $mid * $mid))
        return ($n - ($mid *
                $mid * $mid));
    else
        return (($mid * $mid *
                 $mid) - $n);
}
 
// Returns cube root of a no n
function cubicRoot($n)
{
     
    // Set start and end
    // for binary search
    $start = 0;
    $end = $n;
 
    // Set precision
    $e = 0.0000001;
 
    while (true)
    {
        $mid = (($start + $end)/2);
        $error = diff($n, $mid);
 
        // If error is less
        // than e then mid is
        // our answer so return mid
        if ($error <= $e)
            return $mid;
 
        // If mid*mid*mid is
        // greater than n set
        // end = mid
        if (($mid * $mid * $mid) > $n)
            $end = $mid;
 
        // If mid*mid*mid is
        // less than n set
        // start = mid
        else
            $start = $mid;
    }
}
 
    // Driver Code
    $n = 3;
    echo("Cubic root of $n is ");
    echo(cubicRoot($n));
 
// This code is contributed by nitin mittal.
?>


Javascript


输出:

Cubic root of 3.000000 is 1.442250

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程