[本文链接] http://www.cnblogs.com/hellogiser/p/add-two-numbers-without-arithmetic.html [题目] 写一个函数,求两个整数的之和,要求在函数体内不得使用+.-.×.÷. [分析] 这是一道考察发散思维的很有意思的题目.当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在. 普通四则运算都不能用,那还能用什么啊?我们会想到位运算,因为四则运算本质上都可以通过位运算实现. 举个例子: 首先我们…
这是悦乐书的第371次更新,第399篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第233题(顺位题号是989).对于非负整数X,X的数组形式是从左到右顺序的数字数组.例如,如果X = 1231,则数组形式为[1,2,3,1]. 给定非负整数X的数组形式A,返回整数X + K的数组形式.例如: 输入:A = [1,2,0,0],K = 34 输出:[1,2,3,4] 说明:1200 + 34 = 1234 输入:A = [2,7,4],K = 181 输出:[4,5…
LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCode第二天,今天做了两道题,速度比我想的要慢,看样子两个月的目标有点难,尽力吧.今天主要做了Add Two Numbers和Longest Substring Without Repeating Characters 两道题,下面就来看下这两道题吧. 题一:Add Two Numbers 题目内容 You ar…
不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四则运算符号. 不能使用运算符号, 使用位运算, 第一步异或运算选位, 第二步与运算进位. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostream> #include <list>…
在看<剑指Offer>过程中,面试题47不用加减乘除做加法,给出的思路是使用二进制的异或以及与运算,总之就是使用二进制.但是在使用Python实现的过程中,对于正整数是没有问题的,但是对于负数,会出现死循环情况.这是为什么呢?因为在Python中,对于超出32位的大整数,会自动进行大整数的转变,这就导致了在右移位过程中,不会出现移到了0的情况,也就会造成了死循环. 这里需要了解的是Python中整数实现的原理以及二进制中的移位等原理. 已经知道了右移过程中大整数的自动转化,导致变不成0,那么只…
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 题目分析 不用加减乘除做加法,我第一时间想到的就是用位运算,毕竟计算机是二进制的,所有的操作都是以位运算为基础. 那么假设我们要求7+5=12,二进制就是111+101=1100,我们发现也就是需要处理二进制进位的问题,可是如何处理二进制进位呢? 如果学过计算机体系结构中的进位器就知道怎么做了,不过没学过也没关系,我们可以一步一步的实验,反正位运算就那几种. 先实验下异或:res1=111^101=010,…
// 面试题65:不用加减乘除做加法 // 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷ // 四则运算符号. #include <iostream> int Add(int num1, int num2) { int sum, carry; do { sum = num1 ^ num2;//第一步,使用异或求和(没有进位) carry = (num1 & num2) << ;//第二步,使用与检查同时为1的位,作为进位,左移一位 num1 = s…
分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7相加不进位是2,十位数0和1相加结果是1): 2. 做进位,5+7中有进位,进位的值是10: 3. 将前面两个结果相加,12+10=22 (2)这三步同样适用于二进制位运算 1.不考虑进位对每一位相加.0加0.1加1结果都是0,0加1.1加0结果都是1.这和异或运算一样: 2.考虑进位,0加0.0加1.1加0都不产生进位,只有1加1向前产生一个进位.可看成是先做位与运算,然后向左移…
面试题 65. 不用加减乘除做加法 题目描述 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. Java 实现 public class Solution {     public int Add(int num1,int num2) {         while (num2!=0) {             int temp = num1^num2;             num2 = (num1&num2)<<1;             …
//不用加减乘除四则运算,来做加法 //题目:两个数做加法. //思路:用二进制的位运算的思路.第一步:首先两数相加考虑进位.可以用异或. //第二步:两个数相加只考虑进位,并将最后的结果左移.第三步:将第一二步的结果相加. public class AddN { public int add(int a,int b){ //递归实现 int sum1=a^b; ; ){ return add(sum1,sum2); } /*循环实现 * int sum1,sum2; do{ sum1=a^b;…