La espada se refiere a la oferta 16. El poder entero del valor

La espada se refiere a la oferta 16. El poder entero del valor

Descripción del Título

Inserte la descripción de la imagen aquí

Ideas para resolver problemas

La dificultad de esta pregunta es considerar varias condiciones de frontera.
Inserte la descripción de la imagen aquí


Tenga en cuenta, ¿por qué el exponente de potencias rápidas usa el tipo largo?

Debido a que el rango de int es [-2 ^ 31,2 ^ 31-1], el rango de números negativos es mayor que el de números positivos, por lo que no puede simplemente tomar el valor absoluto. Si la base es exactamente -2 ^ 31 y el exponente es de tipo int, se desbordará.


Para comparar si las variables de tipo doble son iguales, nunca use "==". Utilice el método igual para convertir a una cadena o reduzca la diferencia entre dos variables dobles en un error (como 1e-6) como aquí.


class Solution {
    
    
    public double myPow(double x, int n) {
    
    
        long N = n;
        //底数为0,指数小于0,则非法
        if (isEqual(x, 0.0) && N < 0) return 0.0;
        //底数为0,指数大于等于0,直接返回0.0
        if (isEqual(x, 0.0) && N >= 0) return 0.0;
        
        return N >= 0 ? quickPow(x, N) : 1.0 / quickPow(x, -N);
        
    }

    //快速幂模板, 注意指数 exponent 是 long 类型防止溢出,且为非负数
    public double quickPow(double base, long exponent) {
    
    
        if (exponent == 0) return 1;
        if (exponent == 1) return base;

        double res = quickPow(base, exponent >> 1);
        res *= res;
        //如果是奇数,则要额外乘上base
        if ((exponent & 0x01) == 1)
            res *= base;
        return res;
    }

    //判断两个 double 变量是否相等
    public boolean isEqual(double a, double b) {
    
    
        return Math.abs(a - b) < 1e-6;
    }
}

Supongo que te gusta

Origin blog.csdn.net/cys975900334/article/details/114837868
Recomendado
Clasificación