一、题目

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

二、思路

1、 采用位运算的方法,分三步:
  (1)、两个数异或:相当于每一位相加,而不考虑进位
  (2)、两个数相与,并左移一位:相当于求得进位
  (3)、重复步骤1和2,两个数相与的结果为0,和即为两个数异或的结果
2、例子演示:
 
3+11 = ?
 
13 的二进制      1 1 0 1                     -----a        13
11 的二进制      1 0 1 1                     -----b        11  
 (a&b)
<<1  ->
  1 0 0 1 0                 -----d         18
            a^b  ->     0 1 1 0               
   -----e          6
 (d&e)
<<1  ->
  0 0 1 0 0                 -----f         4
            d^e  ->  1 0 1 0 0              
   -----g        20
 (f&g)
<<1  ->
  0 1 0 0 0                ------h        8
            f^g  ->  1 0 0 0 0                 ------i
          16
 (h&i)
<<1  ->
  0 0 0 0 0

              ------h        0       ----
--------退出循环

            h^i  ->  1 1 0 0 0                ------i
          24
在第一步中,采用异或
第二步中,采用按位与,左移一位

三、代码

public class Solution {
public int Add(int num1,int num2) {
while( num2!=0 ){ //当进位等于0的时候,返回异或的结果,即是要求的和
int sum = num1 ^ num2; //两个数异或:相当于每一位相加,而不考虑进位
int carray = (num1 & num2) << 1;//两个数相与:并左移一位:相当于求得进位
num1 = sum;
num2 = carray;
}
return num1;
}
}

---------------------------------------------

参考链接:

https://www.nowcoder.com/questionTerminal/59ac416b4b944300b617d4f7f111b215

剑指offer四十八之不用加减乘除做加法的更多相关文章

  1. 【剑指offer】面试题 65. 不用加减乘除做加法

    面试题 65. 不用加减乘除做加法 题目描述 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. Java 实现 public class Solution {    ...

  2. 《剑指offer》面试题65. 不用加减乘除做加法

    问题描述 写一个函数,求两个整数之和,要求在函数体内不得使用 "+"."-"."*"."/" 四则运算符号. 示例: 输 ...

  3. 【剑指offer 面试题47】不用加减乘除做加法

    思路: 利用位运算 C++: #include <iostream> using namespace std; int main() { , b = ; int sum, carry; d ...

  4. 剑指Offer(书):不用四则运算做加法

    题目:写一个函数,求两个整数之和,不得使用四则运算位运算. package com.gjjun.jzoffer; /** * 写一个函数,求两个整数之和,不得使用四则运算 * * @author gj ...

  5. 剑指Offer(十八):二叉树的镜像

    剑指Offer(十八):二叉树的镜像 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu ...

  6. 剑指offer四十六之孩子们的游戏(圆圈中最后剩下的数,约瑟夫环问题)

    一.题目 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指 ...

  7. 剑指offer五十八之对称的二叉树

    一.题目 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.二.思路 递归做,详见代码 三.代码 /* public class TreeN ...

  8. 剑指offer四十九之把字符串转换成整数

    一.题目 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 二.思路 详见代码. 三.代码 public class Solution { ...

  9. 剑指offer四十五之扑克牌顺子(序列是否连续)

    一.题目 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

随机推荐

  1. 2018.07.25 bzoj2125: 最短路(圆方树+倍增)

    传送门 人生的第一道仙人掌. 这道题求是仙人掌上的最短路. 先建出圆方树,然后用倍增跑最短路,当lca" role="presentation" style=" ...

  2. 使用process_monitor.sh监控hadoop进程的crontab配置

    可以从下列链接找到process_monitor.sh:https://github.com/eyjian/libmooon/blob/master/shell/process_monitor.sh ...

  3. Node.js使用MySQL的连接池

    使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL ...

  4. 小强 ROS 机器人教程

    首先请您自行依据线标提示将小强接线连接好,完整结构如下两图所示: 小强是属于Turtlebot机器人.它由底盘.主机.Kinect相机(通过USB连接主机)组成,没有显示屏.如果要通过显示器查看主机的 ...

  5. [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现

    // 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...

  6. WinRT 中检查 WiFi 是否可用

    public static bool IsWifiConnected() { bool isWifiConnected = false; ConnectionProfile currentConnec ...

  7. Google Summer of Code礼包

    这个暑假参加google summer of code, 给Google的分布式容器管理系统kubernates开发新的特性,希望从中学习更多的分布式的技术,锻炼自己的编程技巧. 中午在学校的图书馆吗 ...

  8. ChicagoBoss简介

    翻译人:李罗琦 (ChicagoBoss)[http://www.chicagoboss.org] 由 Evan Miller创作,使用erlang/OTP的开发者们可以通过它提供的一个类似于Ruby ...

  9. 对php和java里面的static函数和static的一些理解

    static function: "static方法就是没有this的方法.在static方法里面不可以调用非静态方法,反过来是可以的.并且可以在没有创建任何对象的前提下,仅仅通过类名来调用 ...

  10. Content-Disposition 响应头,设置文件在浏览器打开还是下载

    Content-Disposition属性有两种类型:inline 和 attachment inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载 code: cont ...