【剑指offer】不用加减乘除做加法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38111819/article/details/79949694

题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。



思路:

//step1:按位与是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果
//step2:异或是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果
//step3:n1&n2是查看有没有进位位了,如果有,需要重复step1、step2;如果没有,保留n1、n2上二进制为1的部分,用或将之合为一个数,即为最后结果
# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        # write code here
        if not num1:
            return num2
        if not num2:
            return num1
        while num2 != 0:
            n1 = num1^num2
            n2 = (num1&num2)<<1
            num1 = n1&0xFFFFFFFF
            num2 = n2
        return num1 if num1>>31==0 else num1-4294967296

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页