题目描述:

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

  解题思路:

  本题同样是对发散思维能力的一个考察。首先,我们需要考虑是要求和却不能使用四则运算,那么还能用什么呢?除了四则运算以外,还可以进行计算的也就只剩下了位运算。因此,需要进一步考虑二进制数的位运算,用位运算来代替加法。

  具体思路是:三步走策略。第一步,不考虑进位对每一位相加(模2和),也就是0+0=0,1+1=0,0+1=1,1+0=0,不难看出这一步其实就是做异或运算。第二步,考虑进位,只有1+1会产生进位,因此求每一位的进位可以先将两个数做与运算,然后再左移一位。第三步,将前面两个结果相加,相当于递归相加,直到不产生进位为止。

  编程实现(Java):

public class Solution {
/*
思路:用位运算代替加法
三步走:第一步:不考虑进位加 第二位:考虑进位 第三步:原结果加上进位
*/
public int Add(int num1,int num2) {
//非递归实现
int sum=0,carry=1;
while(carry!=0){ //进位不等于0就循环加
sum=num1^num2;
carry=(num1&num2)<<1;
num1=sum;
num2=carry;
}
return num1;
}
public int Add(int num1,int num2) {
//递归实现
if(num2==0)
return num1;
int sum=num1^num2;
int carry=(num1&num2)<<1;
return Add(sum,carry);
}
}

  相关问题:

  不使用新的变量,交换两个变量的值。

【剑指Offer】48、不用加减乘除做加法的更多相关文章

  1. 剑指Offer 48. 不用加减乘除做加法 (其他)

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目地址 https://www.nowcoder.com/practice/59ac416b4b944300 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 实战体验几种MySQLCluster方案

    来源:keepLearning的专栏      http://www.2cto.com/database/201504/387166.html 1.背景 MySQL的cluster方案有很多官方和第三 ...

  2. 01背包模板、全然背包 and 多重背包(模板)

    转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/ ...

  3. 关于oracle 11g导出数据时 报 ORA 1455错误的处理

    因为导出的该用户的表可能存在空数据表,那么可能就会出现此其异常. 首先:  查看:     SQL>show parameter deferred_segment_creation;  假设为T ...

  4. 代理server的理解(1):Windows环境下的代理server设置

    浏览器中的代理server设置 Windows系统接口提供的代理server设置是一个全局的代理server的设置,如图所看到的,这里就不多解释: 各个浏览器在使用代理设置的时候,能够主动地获代替理设 ...

  5. ibatis 一对多查询

    <typeAlias alias="businessScopeItem" type="com.sdfrdj.vo.BusinessScopeItem"/& ...

  6. 学习笔记二十三——字符函数库cctype【转】

    本文转载自: 字符函数库cctype 在头文件cctype(ctype.h)中定义了一些函数原型,可以简化输入确定字符是否为大写字母.数字.标点符号等工作. 例如: 如果ch是一个字母,则isalph ...

  7. C# 文件的一些基本操作(转)//用C#读写ini配置文件

    C# 文件的一些基本操作 2009-07-19  来自:博客园  字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...

  8. hdu1533 费用流模板

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. openStack enscaption

  10. bzoj1143(2718)[CTSC2008]祭祀river(最长反链)

    1143: [CTSC2008]祭祀river Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2781  Solved: 1420[Submit][S ...