一,问题描述:
1,给定一个double类型,int类型的n。求x的n次方。
2,输入:2.00000 -2147483648
输出: 0
输入:3 4
输出:81
3,解题思路:
采用分治法:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立于原问题性质相同,求出子问题的解。x的n次方是分治法的一个典型的例子。
这题如果直接使用for循环,从1到n,相乘的话,那么时间复杂度为O(n)。使用分治法。则时间复杂度为O(logn)。
temp=pow(x,n/2)*pow(x,n/2);
二,AC了的程序(用Java实现的)
import java.util.*;
public class Test2{
public double myPow(double x, int n)
{
if(n<0)
{
return 1.0/power(x,-n);
}
else
{
return power(x,n);
}
}
public double power(double x,int n)
{
if(n==0)
{
return 1.0;
}
if(n==1)
{
return x;
}
else if(n%2==0)
{
double temp=power(x,n/2);
return temp*temp;
}
else
{
double temp=power(x,n/2);
return temp*temp*x;
}
}
public static void main(String []args)
{
Test2 test=new Test2();
Scanner scan=new Scanner(System.in);
double m=scan.nextDouble();
int n=scan.nextInt();
double result=test.myPow(m,n);
System.out.println("result="+result);
}
}
运行结果: