面试题16-实现一个数的整数平方

题目要求

实现一个数的整数平方

题目解析

思路一:

  • 分析

需要考虑到次方数的不同情况。当次方数为0;那么答案为1 ;当次方数为1;那么答案为base ;当base为0;那么答案为0 ;
我们的目标是获得一个数的exponent次方,那么如果exponent是个偶数,我们就可以先算出exponent/2次方的值然后平方。
如果是计数。我们可以得到exponent/2次方的值然后平方,然后乘上base。也就是
a^n = a^(n/2) * a^(n/2) (n为偶数)
a^n = a^(n/2) * a^(n/2) * a (n为奇数)
另外在进行除2运算以及判断奇偶数是的%运算都尽量用位运算代替,可以优化运行效率。

  • 代码段
public static double power(double base , int exponent) {
        
        double result = 0 ;
        
        if(exponent < 0 ) {
            result = PowerWithUsignedExponent(base , (0-exponent)) ;
            result = 1 / result ;
        }else {
            result = PowerWithUsignedExponent(base , (exponent)) ;
        }
        
        return result ;
    }
    
    public static double PowerWithUsignedExponent(double base , int exponent) {
        
        if(base == 0) {
            return 0 ;
        }
        
        if( exponent == 0 ) {
            return 1 ;
        }
        
        if(exponent == 1) {
            return base ;
        }
        
        double result = PowerWithUsignedExponent(base , exponent>>1 ) ;
        result *= result ;
        if((exponent & 0x1) == 1) {
            result *= base ;
        }
        
        return result ;
    }

测试代码

public static void main(String[] args) {
        
        System.out.println(power(2,2));
        System.out.println(power(0,2));
        System.out.println(power(2,0));
        System.out.println(power(2,1));
        System.out.println(power(-2,2));
        System.out.println(power(2,-2));
        System.out.println(power(-2,-2));
        
    }

运行结果

4.0
0.0

1.0
2.0
4.0
0.25
0.25


看完整源码戳源码地址

你可能感兴趣的:(面试题16-实现一个数的整数平方)