Demostrar las cuestiones de seguridad enteros avión de potencia 16. oferta de valor

título Descripción

Función para lograr el doble de potencia (base doble, int exponente), la búsqueda de la base de la potencia de exponente. No utilice las funciones de biblioteca, al tiempo que elimina la necesidad de considerar el problema de los grandes números.

示例 1:

输入: 2.00000, 10
输出: 1024.00000
示例 2:

输入: 2.10000, 3
输出: 9.26100
示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

enlaces a los temas: https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof

Una solución simple - pensando en todos los casos

class Solution {
public:
    double myPow(double x, int n) {
        if(n == 0 || x == 1.00) return 1.00;

        int flag = 1;
        if(n < 0){
            n = -n;
           flag = 0;
        }

        double rst = 1.00;
        if(flag){
            for(int i = 0 ; i < n;i ++)
                rst *= x;
        }else{
            for(int i = 0; i < n; i++)
                rst /= x;
        }

        return rst;
    }
};

solución de energía rápida

$$
Desde Base = Base ^ * Base 2
$$

$$
base^2 * base^2 = base^4
$$

$$
mismo modo * Base. 4 ^ ^ Base = Base. 4. 8 ^
$$

Para cualquier separable exponente no negativo en una exponencial binario, por ejemplo
$$
Base Base ^ = ^ {11} 1 * 2 * Base Base ^ ^ 8..
$$
Nota: $ [11] {decimal} = [1011] {} binario $

código de la plantilla de potencia rápido

// int pow(int base,int exp) 
// 快速幂函数,返回 base^exp
// base 底数,exp指数
int pow(int base, int exp){
    int ans = 1;
    while(exp){               
        if(exp & 0x1){
            ans *= base;//如果二进制的最后一位是1,则让ans = ans * base
        }
        
        base *= base;//第一次循环,base=base,第二次base = base^2...
        exp >>= 1;
    }   
    
    return ans;
}

Responder a esta pregunta

class Solution {
public:
    double myPow(double base, int n) {
        double res = 1.0;
        int exp = n;
        while(exp){
            if(exp & 0x01) res *= base;
            base *= base;
            exp /= 2;
        }
        return n>0?res:1.0/res;
    }
};

Supongo que te gusta

Origin www.cnblogs.com/Justdocument/p/12601511.html
Recomendado
Clasificación