发散思想题——不用加减乘除做加法(剑指offer)
发散思维题——不用加减乘除做加法(剑指offer)
不用加减乘除做加法
- 参与人数:1096时间限制:1秒空间限制:32768K
- 通过比例:37.37%
- 最佳记录:0 ms|0K()
题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
链接:http://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:我首先想到的是二进制位运算,是的。还记得之前swap的实现吗?
a=a^b;
b=a^b;
a=a^b;
就可以不借助第三个变量把a,b交换!
其实这和
a=a+b;
b=a-b;
a=a-b;
有一定的联系呢。哈哈!
如果我把c=a^b;
d=(a&b)<<1;//这是进位;那么c^d就是得到的和,前提是c&d==0即没有再进位了。那么来个循环吧。
自己在草稿纸上模拟下进位的过程,就ok了!
#include<stdio.h> class Solution { public: int Add(int num1, int num2) { int tmp1=num1^num2; int tmp2=num1&num2; tmp2<<=1; while(tmp2) { int tmp3=tmp1^tmp2; tmp2=tmp1&tmp2; tmp2<<=1; tmp1=tmp3; } return tmp1; } }; int main() { Solution so; int n,m; while(scanf("%d%d",&n,&m)!=EOF) { printf("%d\n",so.Add(n,m)); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。