不用加减乘除做加法
题目描述
写一个函数,求两个整数之和,,要求在函数体内不得使用+、-、*、/四则运算符号。
链接:?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;}
版权声明:本文为博主原创文章,未经博主允许不得转载。
仿佛一支飘荡在水上的华丽咏叹调。