面试题47:不用加减乘除做加法

来源:互联网 发布:淘宝怎么查退货率 编辑:程序博客网 时间:2024/04/28 11:29

学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。

 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+,-,×,÷四则运算符号。

    思路:分三步;

    第一步:相加不考虑进位情况,用异或来处理

    第二步:考虑进位信息,用与操作,左移一位处理

    第三步:将第一步和第二部的结果相加(其实就是重复第一步,第二步),直到进位为0。

    代码如下:

int Add(int num1, int num2){int sum, carry;do{sum = num1^num2;carry = (num1&num2) << 1;num1 = sum;num2 = carry;} while (num2 != 0);return num1;}

相关问题:不使用新的变量,交换两个变量的值。

    假设有两个变量a,b。有两种不同的方法实现:

第一种方法:基于加减法

    A=A+B;

    B=A-B;           (交换)

    A=A-B;           (交换)

第二种方法:基于异或运算

    A=A^B;

    B=A^B;           (交换)

    A=A^B;           (交换)

 


原创粉丝点击