【LeetCode剑指offer65】不用加减乘除做加法(位运算)

简介: (a & b) << 1能够计算a和b的所有进位值;a ^ b则是计算a和b的各位相加(不管进位值)

一、题目


image.png

二、思路

(a & b) << 1能够计算a和b的所有进位值;

a ^ b则是计算a和b的各位相加(不管进位值)

因为不能使用加法运算符,所以上面两项的结果也不能用加法,只能循环上面的步骤计算。

回顾常用的位运算:


使用位运算 ( x > > i ) (x >> i)(x>>i) & 1 11 得到 x 的第 i 个二进制位。

n & (n - 1)可以将n的二进制位的最低位1移除。如1000和0111做与运算后得到0000,即将1000的最低位的1移除了。

n & (-n)即n与其相反数做与运算。由于负数是按照补码规则在计算机中存储的,−n 的二进制表示为 n 的二进制表示的每一位取反再加上 1。

有关n & (-n)的结论:如果n是真整数n & (-n) == n,则n是2的幂。

三、代码

class Solution {
public:
    int add(int temp_sum, int jinwei) {
        //不能使用+号,所以求出异或部分和进位部分后依然不能使用+号
        //所以只能循环到没有进位为止
        while(jinwei != 0){
            //进位为0则停止循环
            //计算进位
            int a = (unsigned int)(temp_sum & jinwei) << 1;
            //各位相加,不算进位
            temp_sum = temp_sum ^ jinwei;
            jinwei = a;
        }
        return temp_sum;
    }
};
相关文章
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
26 6
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
27 4
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 49. 丑数
解决剑指 Offer 49题"丑数"的Python实现,通过动态规划的方法计算出第n个丑数。
28 2
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
25 1
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
23 1
|
13天前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
39 1
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
12 4
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
32 5
|
13天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
11 3
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
23 3