剑指offer 65. 不用加减乘除作加法(Leetcode 371. Sum of Two Integers)函数
https://leetcode.com/problems/sum-of-two-integers/spa
题目:code
写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除这四个符号。blog
分析:leetcode
对于不能使用正常的四则运算符,通常就是使用位运算了。而本题要想实现加法,只能使用异或了。get
须要注意的是,加法的时候涉及进位,而进位的实现利用与运算。class
此外,进位以后还有可能产生进位,因此要在循环里实现。循环
int Add(int num1, int num2) { int sum, carry; do { sum = num1 ^ num2; // 异或实现不进位的加法 carry = (num1 & num2) << 1; // 与实现获得进位数的二进制值 num1 = sum; num2 = carry; } while (num2 != 0); return num1; }
总结:二进制
本题虽然是一道easy题,且寥寥几行代码,但从思路到实现,实际上是很巧妙的,也不是说很容易就写这么完美。好比将sum赋予num1,carry赋予num2。总结