剑指offer系列之四十七:不用加减乘除做加法

简介:

题目描述

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

既然不能使用加减乘除,那么只剩下位运算和逻辑运算了。采用位运算的思路分为三步走:第一步,不进位对两个做异或运算(因为不考虑进位,1与1,0与0的异或运算的结果刚好是两者相加的结果);第二步,通过与运算得到两个数的进位值,因为只有1与1进行与运算的时候才会产生进位,所以产生的进位可以看成是两者先进行与运算再左移一位;第三步,把前两步的结果做与运算得到最后的结果。个人觉得这种思路是在是太赞了。OK,事就成了。下面是这种思路的实现代码(已被牛客AC):

package com.rhwayfun.offer;

/**
 * 不使用操作运算符
 * 
 * @author Administrator
 *
 */
public class CalcSumNoOperation {

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

            num1 = sum;
            num2 = carray;
        }
        return num1;
    }

    public static void main(String[] args) {
        int a = new CalcSumNoOperation().Add(2, 9);
        System.out.println(a);
    }
}
目录
相关文章
|
6月前
|
算法 测试技术 C#
【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数
【位运算】【脑筋急转弯】2749. 得到整数零需要执行的最少操作数
|
算法 C++
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
剑指offer(C++)-JZ65:不用加减乘除做加法(算法-位运算)
|
Java
java数据结构22:多项式加法
我们经常遇到两多项式相加的情况,在这里,我们就需要用程序来模拟实现把两个多项式相加到一起。首先,我们会有两个多项式,每个多项式是独立的一行,每个多项式由系数、幂数这样的多个整数对来表示。
208 0
|
Python
制作实现加减乘除运算的简单计算器
制作实现加减乘除运算的简单计算器
120 0
剑指offer 73. 不用加减乘除做加法
剑指offer 73. 不用加减乘除做加法
61 0
|
机器学习/深度学习 SQL 算法
用Python实现复数的四则运算
用Python实现复数的四则运算
|
存储 算法
【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法
【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法
138 0
【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法
|
测试技术
【牛客】WY49数对,JZ65不用加减乘除做加法
【牛客】WY49数对,JZ65不用加减乘除做加法
155 0
【牛客】WY49数对,JZ65不用加减乘除做加法
不用加减乘除做加法(简单难度)
不用加减乘除做加法(简单难度)
95 0
不用加减乘除做加法(简单难度)
不用加减乘除做加法(剑指offer 65)Java位运算
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。