1 . 数值的整数次方
[](剑指 Offer 16. 数值的整数次方 - 力扣(LeetCode))
var myPow = function(x, n) {
if(n===0) return 1;
if(n===1) return x;
var abs = Math.abs(n);
var result = 1;
while(abs)
{
if(abs&1) // 判断奇偶数
{
result = result * x;
}
x = x * x ;
abs = abs >>> 1 ; // 右移相当于除以2
}
if(n>0) return result;
else return (1.0/result);
};
2 . 不用加减乘除做加法
[](剑指 Offer 65. 不用加减乘除做加法 - 力扣(LeetCode))
我们学加法的时候,老师教我们先算本位的和,进1在计算步骤标记一个1来进位。计算机做运算是一样的,为了降低思考复杂度,我们把标注的进位值记录成一个新的数值。则计算结果变为未进位值与进位值计算。
- 我们发现按位加法(不进位)分四种情况 1 + 1 = 0, 0 + 0 = 0,1 + 0 = 1,0 + 1 = 1 刚好与位运算的异或运算结果相同。
- 进位值1 + 1 = 1,0 + 0 = 0,1 + 0 = 1,0 + 1 = 1 刚好与我们位运算的与运算结果相同。
- 进位值需要向前进一位,与位运算左移运算符结果相同。
- 未进位值与进位值计算。 还是采用异或。
- 一直 while 循环到
进位值为 0;
var add = function(a, b) {
while(b)
{
var c = a ^ b;
b = (a&b)<<1 ;
a = c ;
}
return a;
}