剑指offer:js实现pow函数
程序员文章站
2022-07-10 12:11:28
...
题目:实现 pow(实数,整数),求实数的整数次方,不考虑大数问题.
思路:让实数循环相乘整数次,但是要考虑负数的情况,负数要取倒数,0的倒数无意义
let myPow = (n,e)=>{
let flag = true;//判断是否为负数
if(e<0){
flag = false;
e = -e;
if(n == 0)return -1;//0的负数次方没有意义
}
//定义一个乘法的函数
// let mul = (n,e)=>{
// let res = 1;
// while(e > 0){
// res *=n;
// e--;
// }
// return res;
// }
//奇数次方 = e-1/2 * e-1/2 * 1
//偶数次方 = e/2 * e/2
// let mul = (n,e)=>{
// if(e == 0)return 1;
// if(e == 1)return n;
// let res = 1;
// if(e & 0x1 === 1){
// //奇数的二进制最后一位是1
// res = mul(n,e>>>1)*mul(n,e>>>1)*n;
// }else{
// res = mul(n,e>>>1)*mul(n,e>>>1);
// }
// return res;
// }
let mul = (n,e)=>{
if(e == 0)return 1;
if(e == 1)return n;
let res = mul(n,e>>>1);
res *= res;
if(e & 0x1 === 1){
//奇数的二进制最后一位是1
res = res*n;
}
return res;
}
return flag ? mul(n,e) : 1/mul(n,e);
}
因为32次方其实等于16次方的结果乘以16次方的结果,31次方的结果等于15*15+1
e>>>1 为无符号除以二取整
推荐阅读
-
剑指offer笔记面试题1----赋值运算符函数
-
剑指offer之队列中的最大值(C++/Java双重实现)
-
剑指offer笔记面试题2----实现Singleton模式
-
剑指offer之在排序数组中查找数字 I(C++/Java双重实现)
-
leetcode中剑指offer的习题 C++语言实现(2)
-
leetcode中剑指offer的习题 C++语言实现(1)
-
剑指offer(Java实现)56 - 数组中只出现一次的两个数字
-
【剑指Offer】 40.数组中只出现一次的数字 python实现
-
【剑指Offer】40. Python实现数组中只出现一次的数字
-
【剑指Offer】40.数组中只出现一次的数字(Python实现)