面试篇:Java 实现 x 的 y 次方
前两天面试的一道题,记录一下:
Guava 中的实现:
/*** Returns {@code b} to the {@code k}th power. Even if the result overflows, it will be equal to* {@code BigInteger.valueOf(b).pow(k).intValue()}. This implementation runs in {@code O(log k)}* time.** <p>Compare {@link #checkedPow}, which throws an {@link ArithmeticException} upon overflow.** @throws IllegalArgumentException if {@code k < 0}*/@GwtIncompatible // failing testspublic static int pow(int b, int k) {checkNonNegative("exponent", k); // 保证 k 为非负数switch (b) {case 0:return (k == 0) ? 1 : 0;case 1:return 1;case (-1):return ((k & 1) == 0) ? 1 : -1;case 2:return (k < Integer.SIZE) ? (1 << k) : 0;case (-2):if (k < Integer.SIZE) {return ((k & 1) == 0) ? (1 << k) : -(1 << k);} else {return 0;}default:// continue below to handle the general case}for (int accum = 1; ; k >>= 1) {switch (k) {case 0:return accum;case 1:return b * accum;default:accum *= ((k & 1) == 0) ? 1 : b;b *= b;}}}
网友实现方案,参见: 点击打开链接
public class Power {public static double pow(double a, int b){//check the validity of a and bif(a == 0 && b == 0)return Integer.MIN_VALUE;if(a == 0)return 0;if(b == 0)return 1;if(b == 1)return a;boolean aMinus = a < 0? true: false;boolean bMinus = b < 0? true : false;int bAbs = Math.abs(b);double aAbs = Math.abs(a);//check if b is odddouble tempAnswer;if( (b & 1) != 0){tempAnswer = pow(aAbs, bAbs - 1) * aAbs;}else{tempAnswer = pow(aAbs * aAbs, bAbs / 2);}if(bMinus)tempAnswer = 1.0 / tempAnswer;if(aMinus && (b&1)!= 0)tempAnswer *= -1;return tempAnswer;}public static void main(String[] args){System.out.println(Power.pow(0,0));System.out.println(Power.pow(3,0));System.out.println(Power.pow(3,-1));System.out.println(Power.pow(3,100));return ;}
}
关键还是算法
面试篇:Java 实现 x 的 y 次方相关推荐
- 合辑 | 面试必备!18篇Java面试疑难点详解
简介: 就目前就业环境来看,学习Java软件开发是不会过时的,据各大招聘网站统计,Java程序员的需求10年来一直跃居首位.本节小编汇总了18篇Java面试相关的疑难点解析,知识点+理论详解帮助你稳扎 ...
- 【面试篇】Java自带的线上问题排查工具
[面试篇]Java自带的线上问题排查工具 (1)jps命令 来查看虚拟机进程状态工具 jps是Java提供的一个显示当前所有Java进程的pid的命令,适合查看当前Java进程的一些简单情况.类似于p ...
- 【面试篇】ConcurrentHashMap1.7和1.8详解对比
ConcurrentHashMap1.7和1.8详解对比 [面试篇]数据结构-哈希表 [面试篇]HashMap常见面试题目 [面试篇]HashMap1.7和HashMap1.8的详细区别对比 [面试篇 ...
- 计算机网络 - 面试篇
计算机网络 - 面试篇 综合 OSI七层模型 讲一下网络五层模型,每一层的职责? 在浏览器地址栏输入一个URL后回车,执行的全部过程 tcp.udp.http.https等常用协议 Cookie 和 ...
- 阿里Java面试之-Java高级工程师
哈喽,大家好呀,前段时间我去阿里面试高级Java工程师,我这次把这些问道的题目都列举出来了! 文章末尾我还为大家准备了一份福利哦! JVM · 请介绍一下JVM内存模型??用过什么垃圾回收器?都说说呗 ...
- java负数右移_收入囊中篇---Java程序基础(二)
前言: 本篇是接着上一篇更新的,如果没有阅读上一篇的话,可以查阅或回顾一下. 1.收入囊中篇---Java基础必备知识(一) 2.收入囊中篇---Java程序基础(二) Java程序基础目录 1.Ja ...
- 面试:Java 泛型背后的原理是什么?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 的一幕 来源 | https://www.ji ...
- Nginx面试!java语言程序设计第四版,你还看不懂吗?
第5章 持久化 持久化,Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章首先介绍RDB和AOF两种持久化配置和运行流程,其次对常见的持久化问题进行定位和优化,最后结合Redis常见的单 ...
- java面试加分_不只是给面试加分 -- Java WeakReference的理解与使用
前言: 看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak refere ...
最新文章
- java 大数据处理类 BigDecimal 解析
- iOS开发--线程通信
- 吴恩达作业7:梯度下降优化算法
- Java Hashtable keySet()方法与示例
- php二进制加密_怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
- 【推荐】 RAC 性能优化全攻略与经典案例剖析
- HDU-1253-胜利大逃亡(bfs)
- 嵌入式系统--ARM微处理器概述
- 关于 数据库 my_slq的 安装及其卸载
- 【后缀数组】洛谷P3809模板题
- 快播CEO认罪_成人网站对技术的要求有多高?
- elementui二维表动态渲染
- On the Sense of Humor [附译文]
- 逻辑回归分类——信用卡诈骗检测!这才是干货!
- cocos2d-x太空大战小游戏
- 怎样开发微信小程序(最初的页面)
- Java可变参数的基本使用
- WeRateDog---分析推特数据
- JS undefined报错
- 最新Axure RP 9.0.0.3675 授权码 license