您的位置:首页 > Web前端

【剑指offer系列】 不用加减乘除做加法___47

2016-04-11 20:09 302 查看
  题目描述:

  写一个函数,求两个整数之和。要求不能使用加减乘除   

  

  分析:

  既然题目要求不能用加减乘除,那么只能用到位操作了。

  0和1 、1和0异或为1, 0和0 、1和1异或为0

  0和0 、0和1 、1和0相与为0, 1和1相与为1

  因此可以用异或做加法,与操作来计算进位  

  以3加5为例,3^5=6,3&5=1,则num=6,carry=1<<1=2;

   6^2=4,6&2=2,则num=4,carry=4;

   4^4=0,4&4=4,则num=0,carry=8;

   0^8=0,0&8=0,num=8,carry=0,退出循环。

  

  代码:    

int sum(int num1,int num2){
int carry=0;
int num=0;
do{
num=num1^num2;
carry=(num1&num2)<<1;
num1=num;
num2=carry;
}while(num2);
return num1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: