给定一个数 n,求 n 的立方根。
例子:
Input: n = 3
Output: Cubic Root is 1.442250
Input: n = 8
Output: Cubic Root is 2.000000
我们可以使用二分查找。首先我们定义错误 e。在我们的例子中,让我们说 0.0000001。我们计算数字 n 的三次根的算法的主要步骤是:
- 初始化 start = 0 和 end = n
- 计算 mid = (start + end)/2
- 检查 (n – mid*mid*mid) 的绝对值是否 < e。如果这个条件成立,那么 mid 就是我们的答案,所以返回 mid。
- 如果 (mid*mid*mid)>n 然后设置 end=mid
- 如果 (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 现场工作专业课程和学生竞争性编程现场课程。