一、题目

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

二、思路

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. 通过电机编码器AB相输出确定电机转向

    AB相输出相差90度,即当A相"正跳变"时如果B相是高电平那么是"正转",反之是"反转" 图片: 正转 反转 #include <Ti ...

  2. HDU 1864 最大报销额 (DP-01背包问题)

    题意:中文题,你懂得. 析:拿过题目一看,本来以为是贪心,仔细一看不是贪心,其实是一个简单的01背包问题(DP),不过这个题的坑是在处理发票上,刚开始WA了一次. 分析一下什么样的发票是不符合要求的: ...

  3. MySQL-5.7.10主主同步的安装和配置

    目录 目录 1 1. 安装 1 2. 修改MySQL的root密码 4 3. mysqld_safe和mysql.server 4 4. 主主同步配置 4 4.1. 创建同步用户 4 4.2. my. ...

  4. C++和Python混合编程

    为何人工智能(AI)首选Python?读完这篇文章你就知道了:https://blog.csdn.net/qq_41769259/article/details/79419322 C++调用Pytho ...

  5. hdu 4952 暴力

    http://acm.hdu.edu.cn/showproblem.php?pid=4952 给定x,k,i从1到k,每次a[i]要是i的倍数,并且a[i]大于等于a[i-1],x为a0 递推到下一个 ...

  6. mssql内存表

    自MSSQL2014开始引入内存表. 怎样创建内存表: USE testGO ALTER DATABASE testADD FILEGROUP fg_test CONTAINS MEMORY_OPTI ...

  7. 【算法30】从数组中选择k组长度为m的子数组,要求其和最小

    原题链接:codeforce 267 Div2 C 问题描述: 给定长度为n的数组a[],从中选择k个长度为m的子数组,要求和最大. 形式描述为:选择$k$个子数组[$l_1$, $r_1$], [$ ...

  8. arduino远程刷新(烧录)固件

    在车间部署了十几个网络版的温湿度采集器(基于arduino的),这些采集器分布在不同的地方,现在要更新一下上面的固件.最笨的方法是一个一个地取下来,插到电脑的USB接口上进行固件更新,这样做显然很麻烦 ...

  9. Android 实现界面(Activity)的跳转

    界面跳转 如,我想重一个界面A跳转到界面B,可以用,setContentView(R.layout.activity_login); 但是他其实只是将改界面铺在了最顶层,而按menu这些菜单其实还是底 ...

  10. vim 安装vim-javascript插件--Vundle管理

    最近看了一下node.js,但是写的时候,vim对js没有很好的提示.于是就安装插件来处理,准备安装vim-javascript.但是安装github上面的插件时,推荐用Vundle和pathogen ...