给定两个整数 x 和 n,编写一个函数来计算 x n 。我们可以假设 x 和 n 很小并且不会发生溢出。
例子 :
Input : x = 2, n = 3
Output : 8
Input : x = 7, n = 2
Output : 49
下面的解决方案将问题划分为大小为 y/2 的子问题,并递归调用这些子问题。
C++
// C++ program to calculate pow(x,n)
#include
using namespace std;
class gfg
{
/* Function to calculate x raised to the power y */
public:
int power(int x, unsigned int y)
{
if (y == 0)
return 1;
else if (y % 2 == 0)
return power(x, y / 2) * power(x, y / 2);
else
return x * power(x, y / 2) * power(x, y / 2);
}
};
/* Driver code */
int main()
{
gfg g;
int x = 2;
unsigned int y = 3;
cout << g.power(x, y);
return 0;
}
// This code is contributed by SoM15242
C
#include
/* Function to calculate x raised to the power y */
int power(int x, unsigned int y)
{
if (y == 0)
return 1;
else if (y%2 == 0)
return power(x, y/2)*power(x, y/2);
else
return x*power(x, y/2)*power(x, y/2);
}
/* Program to test function power */
int main()
{
int x = 2;
unsigned int y = 3;
printf("%d", power(x, y));
return 0;
}
Java
class GFG {
/* Function to calculate x raised to the power y */
static int power(int x, int y)
{
if (y == 0)
return 1;
else if (y % 2 == 0)
return power(x, y / 2) * power(x, y / 2);
else
return x * power(x, y / 2) * power(x, y / 2);
}
/* Program to test function power */
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.printf("%d", power(x, y));
}
}
// This code is contributed by Smitha Dinesh Semwal
Python3
# Python3 program to calculate pow(x,n)
# Function to calculate x
# raised to the power y
def power(x, y):
if (y == 0): return 1
elif (int(y % 2) == 0):
return (power(x, int(y / 2)) *
power(x, int(y / 2)))
else:
return (x * power(x, int(y / 2)) *
power(x, int(y / 2)))
# Driver Code
x = 2; y = 3
print(power(x, y))
# This code is contributed by Smitha Dinesh Semwal.
C#
using System;
public class GFG {
// Function to calculate x raised to the power y
static int power(int x, int y)
{
if (y == 0)
return 1;
else if (y % 2 == 0)
return power(x, y / 2) * power(x, y / 2);
else
return x * power(x, y / 2) * power(x, y / 2);
}
// Program to test function power
public static void Main()
{
int x = 2;
int y = 3;
Console.Write(power(x, y));
}
}
// This code is contributed by shiv_bhakt.
PHP
Javascript
C++
/* Function to calculate x raised to the power y in O(logn)*/
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp * temp;
else
return x * temp * temp;
}
// This code is contributed by Shubhamsingh10
C
/* Function to calculate x raised to the power y in O(logn)*/
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
return x*temp*temp;
}
Java
/* Function to calculate x raised to the power y in O(logn)*/
static int power(int x, int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp*temp;
else
return x*temp*temp;
}
// This code is contributed by divyeshrabadiya07.
Python3
# Function to calculate x raised to the power y in O(logn)
def power(x,y):
temp = 0
if( y == 0):
return 1
temp = power(x, int(y / 2))
if (y % 2 == 0)
return temp * temp;
else
return x * temp * temp;
# This code is contributed by avanitrachhadiya2155
C#
/* Function to calculate x raised to the power y in O(logn)*/
static int power(int x, int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp*temp;
else
return x*temp*temp;
}
// This code is contributed by divyesh072019.
Javascript
C++
/* Extended version of power function
that can work for float x and negative y*/
#include
using namespace std;
float power(float x, int y)
{
float temp;
if(y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp * temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
// Driver Code
int main()
{
float x = 2;
int y = -3;
cout << power(x, y);
return 0;
}
// This is code is contributed
// by rathbhupendra
C
/* Extended version of power function that can work
for float x and negative y*/
#include
float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x*temp*temp;
else
return (temp*temp)/x;
}
}
/* Program to test function power */
int main()
{
float x = 2;
int y = -3;
printf("%f", power(x, y));
return 0;
}
Java
/* Java code for extended version of power function
that can work for float x and negative y */
class GFG {
static float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
/* Program to test function power */
public static void main(String[] args)
{
float x = 2;
int y = -3;
System.out.printf("%f", power(x, y));
}
}
// This code is contributed by Smitha Dinesh Semwal.
Python3
# Python3 code for extended version
# of power function that can work
# for float x and negative y
def power(x, y):
if(y == 0): return 1
temp = power(x, int(y / 2))
if (y % 2 == 0):
return temp * temp
else:
if(y > 0): return x * temp * temp
else: return (temp * temp) / x
# Driver Code
x, y = 2, -3
print('%.6f' %(power(x, y)))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# code for extended version of power function
// that can work for float x and negative y
using System;
public class GFG{
static float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y % 2 == 0)
return temp * temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
// Program to test function power
public static void Main()
{
float x = 2;
int y = -3;
Console.Write(power(x, y));
}
}
// This code is contributed by shiv_bhakt.
PHP
0)
return $x *
$temp * $temp;
else
return ($temp *
$temp) / $x;
}
}
// Driver Code
$x = 2;
$y = -3;
echo power($x, $y);
// This code is contributed by ajit
?>
Javascript
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
}
// This code is contributed by ukasp.
Java
// Java program for the above approach
import java.io.*;
class GFG {
public static int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
Python3
# Python3 program for the above approach
def power(x, y):
# If x^0 return 1
if (y == 0):
return 1
# If we need to find of 0^y
if (x == 0):
return 0
# For all other cases
return x * power(x, y - 1)
# Driver Code
x = 2
y = 3
print(power(x, y))
# This code is contributed by shivani.
C#
// C# program for the above approach
using System;
class GFG{
public static int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
public static void Main(String[] args)
{
int x = 2;
int y = 3;
Console.WriteLine(power(x, y));
}
}
// This code is contributed by Rajput-Ji
Javascript
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
// return type of pow()
// function is double
return (int)pow(x, y);
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
}
// This code is contributed by hemantraj712.
Java
// Java program for the above approach
import java.io.*;
class GFG {
public static int power(int x, int y)
{
// Math.pow() is a function that
// return floating number
return (int)Math.pow(x, y);
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
Python3
# Python3 program for the above approach
def power(x, y):
# Return type of pow()
# function is double
return pow(x, y)
# Driver Code
x = 2
y = 3
print(power(x, y))
# This code is contributed by susmitakundugoaldanga
C#
// C# program for the above approach
using System;
public class GFG {
public static int power(int x, int y)
{
// Math.pow() is a function that
// return floating number
return (int)Math.Pow(x, y);
}
// Driver code
static public void Main()
{
int x = 2;
int y = 3;
Console.WriteLine(power(x, y));
}
}
Javascript
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
int result = 1;
while (y > 0) {
if (y % 2 == 0) // y is even
{
x = x * x;
y = y / 2;
}
else // y isn't even
{
result = result * x;
y = y - 1;
}
}
return result;
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
return 0;
}
// This code is contributed by Madhav Mohan
Java
// Java program for above approach
class GFG{
static int power(int x, int y)
{
int result = 1;
while (y > 0)
{
// y is even
if (y % 2 == 0)
{
x = x * x;
y = y / 2;
}
// y isn't even
else
{
result = result * x;
y = y - 1;
}
}
return result;
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
// This code is contributed by hritikrommie
Javascript
输出 :
8
时间复杂度: O(n)
空间复杂度: O(1)
算法范式:分而治之。
通过只计算一次 power(x, y/2) 并存储它,可以将上述函数优化为 O(logn)。
C++
/* Function to calculate x raised to the power y in O(logn)*/
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp * temp;
else
return x * temp * temp;
}
// This code is contributed by Shubhamsingh10
C
/* Function to calculate x raised to the power y in O(logn)*/
int power(int x, unsigned int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
return x*temp*temp;
}
Java
/* Function to calculate x raised to the power y in O(logn)*/
static int power(int x, int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp*temp;
else
return x*temp*temp;
}
// This code is contributed by divyeshrabadiya07.
蟒蛇3
# Function to calculate x raised to the power y in O(logn)
def power(x,y):
temp = 0
if( y == 0):
return 1
temp = power(x, int(y / 2))
if (y % 2 == 0)
return temp * temp;
else
return x * temp * temp;
# This code is contributed by avanitrachhadiya2155
C#
/* Function to calculate x raised to the power y in O(logn)*/
static int power(int x, int y)
{
int temp;
if( y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp*temp;
else
return x*temp*temp;
}
// This code is contributed by divyesh072019.
Javascript
优化解的时间复杂度: O(logn)
让我们扩展 pow函数以适用于负 y 和浮动 x。
C++
/* Extended version of power function
that can work for float x and negative y*/
#include
using namespace std;
float power(float x, int y)
{
float temp;
if(y == 0)
return 1;
temp = power(x, y / 2);
if (y % 2 == 0)
return temp * temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
// Driver Code
int main()
{
float x = 2;
int y = -3;
cout << power(x, y);
return 0;
}
// This is code is contributed
// by rathbhupendra
C
/* Extended version of power function that can work
for float x and negative y*/
#include
float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x*temp*temp;
else
return (temp*temp)/x;
}
}
/* Program to test function power */
int main()
{
float x = 2;
int y = -3;
printf("%f", power(x, y));
return 0;
}
Java
/* Java code for extended version of power function
that can work for float x and negative y */
class GFG {
static float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
/* Program to test function power */
public static void main(String[] args)
{
float x = 2;
int y = -3;
System.out.printf("%f", power(x, y));
}
}
// This code is contributed by Smitha Dinesh Semwal.
蟒蛇3
# Python3 code for extended version
# of power function that can work
# for float x and negative y
def power(x, y):
if(y == 0): return 1
temp = power(x, int(y / 2))
if (y % 2 == 0):
return temp * temp
else:
if(y > 0): return x * temp * temp
else: return (temp * temp) / x
# Driver Code
x, y = 2, -3
print('%.6f' %(power(x, y)))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# code for extended version of power function
// that can work for float x and negative y
using System;
public class GFG{
static float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y % 2 == 0)
return temp * temp;
else
{
if(y > 0)
return x * temp * temp;
else
return (temp * temp) / x;
}
}
// Program to test function power
public static void Main()
{
float x = 2;
int y = -3;
Console.Write(power(x, y));
}
}
// This code is contributed by shiv_bhakt.
PHP
0)
return $x *
$temp * $temp;
else
return ($temp *
$temp) / $x;
}
}
// Driver Code
$x = 2;
$y = -3;
echo power($x, $y);
// This code is contributed by ajit
?>
Javascript
输出 :
0.125000
时间复杂度: O(log|n|)
辅助空间: O(1)
使用递归:
这种方法几乎类似于迭代解决方案
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
}
// This code is contributed by ukasp.
Java
// Java program for the above approach
import java.io.*;
class GFG {
public static int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
蟒蛇3
# Python3 program for the above approach
def power(x, y):
# If x^0 return 1
if (y == 0):
return 1
# If we need to find of 0^y
if (x == 0):
return 0
# For all other cases
return x * power(x, y - 1)
# Driver Code
x = 2
y = 3
print(power(x, y))
# This code is contributed by shivani.
C#
// C# program for the above approach
using System;
class GFG{
public static int power(int x, int y)
{
// If x^0 return 1
if (y == 0)
return 1;
// If we need to find of 0^y
if (x == 0)
return 0;
// For all other cases
return x * power(x, y - 1);
}
// Driver Code
public static void Main(String[] args)
{
int x = 2;
int y = 3;
Console.WriteLine(power(x, y));
}
}
// This code is contributed by Rajput-Ji
Javascript
输出:
8
时间复杂度: O(log n)
辅助空间: O(1)
使用Java 的Math.pow()函数:
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
// return type of pow()
// function is double
return (int)pow(x, y);
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
}
// This code is contributed by hemantraj712.
Java
// Java program for the above approach
import java.io.*;
class GFG {
public static int power(int x, int y)
{
// Math.pow() is a function that
// return floating number
return (int)Math.pow(x, y);
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
蟒蛇3
# Python3 program for the above approach
def power(x, y):
# Return type of pow()
# function is double
return pow(x, y)
# Driver Code
x = 2
y = 3
print(power(x, y))
# This code is contributed by susmitakundugoaldanga
C#
// C# program for the above approach
using System;
public class GFG {
public static int power(int x, int y)
{
// Math.pow() is a function that
// return floating number
return (int)Math.Pow(x, y);
}
// Driver code
static public void Main()
{
int x = 2;
int y = 3;
Console.WriteLine(power(x, y));
}
}
Javascript
输出:
8
非递归方法:对于新手来说,这是一个非常有效的方法,他们觉得很难理解迭代递归调用。这种方法也需要T(n)= O(log(n)) 的复杂度。
C++
// C++ program for the above approach
#include
using namespace std;
int power(int x, int y)
{
int result = 1;
while (y > 0) {
if (y % 2 == 0) // y is even
{
x = x * x;
y = y / 2;
}
else // y isn't even
{
result = result * x;
y = y - 1;
}
}
return result;
}
// Driver Code
int main()
{
int x = 2;
int y = 3;
cout << (power(x, y));
return 0;
}
// This code is contributed by Madhav Mohan
Java
// Java program for above approach
class GFG{
static int power(int x, int y)
{
int result = 1;
while (y > 0)
{
// y is even
if (y % 2 == 0)
{
x = x * x;
y = y / 2;
}
// y isn't even
else
{
result = result * x;
y = y - 1;
}
}
return result;
}
// Driver Code
public static void main(String[] args)
{
int x = 2;
int y = 3;
System.out.println(power(x, y));
}
}
// This code is contributed by hritikrommie
Javascript
输出
8
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。