【剑指 Offer 题解】65. 不用加减乘除做加法

题目描述

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

思路

1、两个数异或,表示没有考虑进位的情况下两数的和
2、两个数相与,并左移一位,表示进位
3、上述两步结果相加

计算 3 + 6
1、两数异或 0011 ^ 0110 = 0101 
2、两数相与 0011 & 0110 = 0010
3、左移一位 0010 << 1 = 01000011 + 0110 = 0101 + 01003 + 6 = 5 + 4)
如此循环下去,直到进位为0

循环

public int add(int a, int b) {
   	while(b != 0) {
   		int sum = a ^ b;
   		int carry = (a & b) << 1;
   		a = sum;
   		b = carry;
   	}
   	return a;
   }

递归

public int add(int a, int b) {
	return b == 0 ? a : add(a ^ b, (a & b) << 1);
}
发布了18 篇原创文章 · 获赞 0 · 访问量 513

猜你喜欢

转载自blog.csdn.net/qingqingxiangyang/article/details/104247377
今日推荐