这两道题看似是算法题,实际上是考察关于计算机底层实现加减乘除方法的知识。
不用加减乘除做加法
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
一个加法计算可以分为按位相加以及进位两部分,我们可以分别用异或运算和与运算来实现这两者。
1 | class Solution { |
求1+2+3+…+n
题目描述:
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
上式等价于 $\frac{(n+1)n}{2}$ ,故此题可以转化为如何使用加减法实现乘法。
同样乘法计算 $mn$ 可以分为两部分:m 与 n的每一位相乘,再把上述结果相加。转化为二进制则是 m 与 0 或 1 相乘,再相加,前者可以用简单的与运算完成。

1 | class Solution { |