<<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;(B & 1) && (ans += A);A <<= 1;B >>= 1;return ans >> 1;}};
方法一:使用&&运算作为if的替代品,递归作为for的替代品 。
方法二:这是我看一个老哥的评论看到的,秀的我头皮发麻,你定义的数组大小就相当于实现了n * (n + 1),接下来我们使用>>位的右移运算完成/ 2的效果,这就是n (n + 1) / 2了 。
方法三:快速乘,
剑指 Offer 65. 不用加减乘除做加法
class Solution {public:int add(int a, int b) {while (b) { //应进位的每位上都为0时结束int carry = a & b; // 计算 每位是否有进位,若该位有那么该位就是1a = a ^ b; // 计算 本位,即剔除要进位之后的位b = (unsigned)carry << 1; // 存储 相应位上的进位 后序的数直接加上进位就可}return a;}};//记住口诀: 异或保留,与进位, 与为空时就返回
c:判断a和b进行&运算后每一位是否有进位,若该位有进位,那么该位就为1 。
a:计算本位,即a和b进行^运算后剔除掉二进制数中相同的位置为0,方便后序与进位再做运算 。
b:其实b才是真正的进位,c只是判断是否存在进位,知道哪一位存在进位之后将其进行
- 《窥情》未删减版在哪儿在线观看
- android应用程序开发!在字节跳动我是如何当面试官的,威力加强版
- 初一上册数学 初一上册数学书电子版
- 最值得普通人学的编程语言是哪个?
- win10企业版ltsc密钥 win10企业版ltsc有录屏功能吗
- 造梦西游4好号和密码真的90级 造梦西游4好号和密码真的手机版
- iqooneo7竞速版屏幕尺寸
- 一九四二电影免费完整版在哪儿在线观看
- 偷窥课程完整版是什么电影
- 医用口罩和普通口罩有什么区别