leetcode 50 值得再看一遍

本文介绍了一种实现幂运算的方法,特别关注于处理整数溢出的问题,并通过递归方式计算x的n次幂,同时考虑了特殊情况如Integer.MIN_VALUE。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写这个只适用于自己再次回顾的时候,方便查找

Implement pow(xn).

首先int的最小值是- ....48 而int的最大值是47 这个就意味着-..48的绝对值越界了,但是math.abs中负数最大值的绝对值还是负数,因此我考虑到相似可以用到-..46不能是-..47因为这样数字的符号方向就可能变了。还有就是int的最大值和最小值可以通过Integer.MAX_VALUE和Integer.MIN_VALUE获得。这些都是细节,技巧在于return值和迭代。默认返回值是0.0

public double myPow(double x, int n) {
      double y=x;
	 if(n==0){
		 return 1;
	 }else{        
		 if(n==Integer.MIN_VALUE){
			 n=n+2;
		 }
		 int abs=Math.abs(n);
		 double temp=myPow(y,abs/2);
		 if(abs%2==0){
			 y=temp*temp;
		 }else{
			 y*=(temp*temp);
		 }
		 return n < 0 ? Math.max(1/y, 0.0):y;
	 }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值