博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指Offer】48不用加减乘除做加法
阅读量:5075 次
发布时间:2019-06-12

本文共 804 字,大约阅读时间需要 2 分钟。

题目描述

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

时间限制:1秒;空间限制:32768K

解题思路

思路:位运算

  1. 两个数异或:相当于每一位相加,而不考虑进位;
  2. 两个数相与,并左移一位:相当于求得进位;
  3. 将上述两步的结果相

要注意Python没有无符号又移操作,所以需要越界检查。

Python代码:

# -*- coding:utf-8 -*-class Solution:    def Add(self, num1, num2):        # write code here        while num2 != 0:            Sum = (num1 ^ num2) & 0xFFFFFFFF #对负数的处理            Carry = ((num1 & num2) << 1) & 0xFFFFFFFF            num1 = Sum            num2 = Carry        return num1 if num1<=0x7FFFFFFF else ~(num1^0xFFFFFFFF)

C++代码:

class Solution {public:    int Add(int num1, int num2)    {        while( num2!=0 ){            int sum = num1 ^ num2;            int carray = (num1 & num2) << 1;            num1 = sum;            num2 = carray;        }        return num1;    }};

 

转载于:https://www.cnblogs.com/yucen/p/9912013.html

你可能感兴趣的文章
java编写提升性能的代码
查看>>
Abstract Factory Pattern
查看>>
list 容器 排序函数.xml
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
django Models 常用的字段和参数
查看>>
IOS--沙盒机制
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
Jquery ui widget开发
查看>>
关于indexOf的使用
查看>>
英语单词
查看>>
Mongo自动备份
查看>>
cer证书签名验证
查看>>