剑指offer第二版——面试题16(java)

面试题16:数值的整数次方

题目:

实现函数power(double base, int exponent),求base的exponent次方。不能使用库函数,同时不需要考虑大数问题

需要考虑的问题:

次方为正、负、0;输入为0

次方为正时,直接计算;次方为负时,先计算正的次方数,再求倒数;如果输入为0,次方为负——异常处理

先考虑base,再考虑exponent 

public class Q16 {
	public static void main(String[] args) {
		System.out.println(Power(0,0));
		System.out.println(Power(0,-1));
		System.out.println(Power(0,2));
		System.out.println(Power(2,5));
		System.out.println(Power(2,-5));
		System.out.println(Power(2,0));
	}
	
	public static double Power(double base,int exponent) {
		double result = 0;
		
		// base = 0 且为求负的次方 错误返回
		if(base == 0 && exponent<0) { return -1; }
		// base = 0 且为求正次方
		if(base == 0 ) { return 0; }
		// 0次方返回1
		if(exponent == 0) {	return 1;  }
		// 1次方返回原数
		if(exponent == 1) { return base; }
		
		if(exponent>0) {
			result = unsignPow(base,exponent);
		}else {
			result = unsignPow(base,-1*exponent);
			result = 1/result;
		}
		return result;
	}
	
	// base!=0
	public static double unsignPow(double base,int exponent) {
			// 奇数 偶数
			//System.out.printf("base:%f,exponent:%d\n",base,exponent);
			if(exponent == 0) {return 1;}
			if(exponent == 1) {return base;}
			
			double result = unsignPow(base,exponent>>1);
			// 偶数,则自己乘自己 如2^8 = 2^4 * 2^4 
			result = result * result;
			// 奇数,则需要乘base 如 2^7 = 2^3 * 2^3 * 2
			if((exponent & 0x1) ==1) {
				result = result * base;
			}
			return result;
		}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值