不用加减乘除做加法(剑指offer)

不用加减乘除做加法

题目描述

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

链接:?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;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

仿佛一支飘荡在水上的华丽咏叹调。

不用加减乘除做加法(剑指offer)

相关文章:

你感兴趣的文章:

标签云: