48剑指offer--不用加减乘除做加法

Posted qqky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了48剑指offer--不用加减乘除做加法相关的知识,希望对你有一定的参考价值。

题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 
解题思路:例如5+17转化成二进制即为101+10001
1)不考虑进位101 + 10001 = 10100
2)进位1+1 = 10
3)相加10100+10 = 10110 =22
所以分别算不考虑进位和进位的相加即可,其中不考虑进位相当于异或操作0^0 = 0 0^1 = 1 1^0 = 1 1^1 =0,进位操作相当于先求&再左移1 1&1 = 1 1<<1 = 10
 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         int sum = 0;//不考虑进位和
 6         int carry = 0;//进位结果
 7         while(num2 != 0)//直到不产生进位结束循环
 8         {
 9             sum = num1^num2;
10             carry = (num1&num2)<<1;
11             num1 = sum;
12             num2 = carry;
13         }
14         return num1;
15     }
16 };

 

以上是关于48剑指offer--不用加减乘除做加法的主要内容,如果未能解决你的问题,请参考以下文章

[剑指Offer] 48.不用加减乘除做加法

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

剑指offer系列——48.不用加减乘除做加法

剑指offer系列——剑指 Offer 65. 不用加减乘除做加法

剑指Offer - 不用加减乘除做加法

剑指offer——不用加减乘除做加法