【发布时间】:2016-04-14 00:36:34
【问题描述】:
我们必须将两个数字 x 和 y 相乘,但我们不能使用 * 运算符。
一种简单的方法是添加 x , y 次或添加 y, x 次,这很简单并且是线性的。
第二种方法是选择任何数字(比如 x)并查看该数字中设置了哪些所有位,如果设置了第 i 个位,请执行以下操作:
product +=y<<i//product is 0 initially and do this for all i.
显然对于 32 位数字,循环运行 32 次,其时间复杂度是恒定的。
我的问题是,还有其他方法吗?记住我们不能使用 *。
【问题讨论】:
-
根据您对精度的敏感程度以及允许使用的数字表示形式,您可能只需执行 x / (1 / y)
-
这不适用于整数类型,polettix,除非您愿意对其进行调整以进行浮点运算(这会导致精度损失)。
-
小心负数!
-
@polettix 忘了说,我们也不能使用 / 操作符。
-
@SumeetSingh 我建议也更新这个问题。