剑指offer:数值的整数次方
Posted _阿锋丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:数值的整数次方相关的知识,希望对你有一定的参考价值。
文章目录
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路及代码
方法一:暴力方法
很显然就是n个b相乘。循环n次。
class Solution
public:
double Power(double base, int exponent)
if(exponent == 0)
return 1;
if(exponent<0)
base = 1/base;
exponent = -exponent;
double res = base;
while(exponent>1)
exponent--;
base = base * res;
return base;
;
方法二:递归法(快速幂)
class Solution
public:
double recursion(double b,int n)
if(n==0)
return 1.0;
double ret = recursion(b,n/2);
// n&1判断为1就是奇数,因为奇数的二进制最后一位永远都是1
if(n&1)
return ret*ret*b;
else
return ret*ret;
double Power(double base, int exponent)
if(exponent<0)
base = 1 / base;
exponent = -exponent;
return recursion(base,exponent);
;
方法三:非递归的快速幂
class Solution
public:
double Power(double b, int n)
if (n < 0)
b = 1 / b;
n = -n;
double x = b; // 记录x^0, x^1, x^2 ...
double ret = 1.0;
while (n)
if (n&1)
ret *= x; // 二进制位数是1的,乘进答案。
x *= x;
// 算术右移一位;比如3(11)右移一位变成1(1)
n >>= 1;
return ret;
;
以上是关于剑指offer:数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章