剑指offer_【48】不用加减乘除做加法

1.题目描述

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

2.解题思路

利用&、|、^等运算

(1)定义一个sum和一个进位位carry,sum用来记录二进制的两位数无进位相加得到的值(num1^num2),进位位carry用来记录需要向哪个位进位(num&num2<<1)

(2)将得到的sum和carry重新赋值给num1和num2.循环的结束条件是进位位为0时终止。

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Solution {
public int Add(int num1,int num2) {
int carry = 0;
int sum = 0;
do{
//异或,相同为0不同为1 ,得到的结果相当于二进制的两个数无进位相加,
//相加为2的结果是0.如6和12相异或,即(0110^1100) = 1010

sum = num1 ^ num2;
//num1&num2得到该位数需要进位,即向前进位<<1

carry = (num1&num2)<<1;
num1 = sum;

num2 = carry;
}while(num2!=0); //直到无进位结束
return num1;
}
}
文章目录
  1. 1. 1.题目描述
  2. 2. 2.解题思路
  3. 3. 3.代码
| 139.6k