题目描述

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

题目地址

https://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?tpId=13&tqId=11201&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路

首先看十进制是如何做的: 5+7=12,

可以使用三步走:

第一步:相加各位的值,不算进位,得到2。

第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。

第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。 同样我们可以

三步走的方式计算二进制值相加: 5-101,7-111

第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。

第二步:计算进位值,得到1010,相当于各位做与操作得到101,再向左移一位得到1010,(101&111)<<1。

第三步:重复上述两步, 各位相加 010^1010=1000,进位值为100=(010&1010)<<1。

继续重复上述两步:1000^100 = 1100,进位值为0,跳出循环,1100为最终结果。

Python需要处理负数

Python

# -*- coding:utf-8 -*-
class Solution:
def Add(self, num1, num2):
# write code here
unit = (num1^num2)& 0xFFFFFFFF
carry = ((num1&num2)<<1) & 0xFFFFFFFF
while carry:
temp1 = unit
temp2 = carry
unit = (temp1^temp2) & 0xFFFFFFFF
carry = ((temp1&temp2)<<1) & 0xFFFFFFFF
return unit if unit<=0x7FFFFFFF else ~(unit^0xFFFFFFFF) if __name__ == '__main__':
result = Solution().Add(-12,-104)
print (result)

剑指Offer 48. 不用加减乘除做加法 (其他)的更多相关文章

  1. [剑指Offer] 48.不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 首先看十进制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算进位,得到2.第二步:计算进 ...

  2. 剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

    剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers) https://leetcode.com/problems/sum-of-two-in ...

  3. 剑指 Offer 65. 不用加减乘除做加法 + 位运算

    剑指 Offer 65. 不用加减乘除做加法 Offer_65 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...

  4. 【剑指Offer】不用加减乘除做加法 解题报告(Java)

    [剑指Offer]不用加减乘除做加法 解题报告(Java) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

  5. 【Java】 剑指offer(65) 不用加减乘除做加法

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×. ...

  6. Go语言实现:【剑指offer】不用加减乘除做加法

    该题目来源于牛客网<剑指offer>专题. 第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111. 第二步:计算进位值,得到1010,相当于各位 ...

  7. 【剑指offer】不用加减乘除做加法,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 第一步:不考虑进位对每一位相加(异或操作) 第二步:考虑进位(位与运算+左移) 第三步:第一步和第二步相加(重复执行前两步) # 代码 #include ...

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

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27966641 题目描写叙述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.* ...

  9. 剑指offer——75不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号.   题解: 使用位运算   class Solution { public: int Add(int num1 ...

随机推荐

  1. 【只要有ENA千万别用NCBI】拆分SRA文件,通过SRAtoolkits

    只要有ENA千万别用NCBI!!!! 最近开始分析网上Download的数据,一开始用人家现成的GWAS数据,后来觉得反正自己的数据到手该做的也是要做的,出来混早晚是要还的,所以就开始从头分析一些SR ...

  2. Python Rabbit 广播模式

    Exchange 在RabbitMQ下进行广播模式需要用到,exchange这个参数,它会把发送的消息推送到queues队列中,exchange必须要知道,它接下来收到的消息要分给谁,是要发给一个qu ...

  3. java中什么是泛型

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...

  4. linux --- 6. 项目部署

    一.负载均衡 .准备三台机器,准备3台虚拟机,或者和俩同桌交流一下 192.168.226.128 是nginx资源服务器,返回页面的 192.168.226.129 用作nginx负载均衡服务器 1 ...

  5. FFT 快速傅里叶变换 学习笔记

    FFT 快速傅里叶变换 前言 lmc,ikka,attack等众多大佬都没教会的我终于要自己填坑了. 又是机房里最后一个学fft的人 早背过圆周率50位填坑了 用处 多项式乘法 卷积 \(g(x)=a ...

  6. Win32汇编学习(8):菜单

    这次我们将在我们的应用程序中加入一个菜单. 理论: 菜单可以说是WINDOWS最重要的元素之一.有了它,用户可以方便地选择操作命令.用户只要细读一下所有的菜单项就可以明了应用程序所提供的大概功能,而且 ...

  7. 为虚拟机配置固定ip地址

    vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改BOOTPROTO为static 新增IPADDR即可 如下图所示

  8. layui框架

    layui框架 Fly社区/分享一个layui风格的grid.greegrid

  9. js 过滤器

    ,,]; ary[] = ; ary.filter(function(x) { return x === undefined; }); // A. [undefined x 7] // B. [0, ...

  10. inline-block有间隙的兼容处理