java不使用*运算符将数字相乘
我正在上一堂编程课,有人问了我一个棘手的问题,这个问题一直到课程结束都没有答案
问题:
如何将任何输入(浮点、整数等)乘以7,
without using the
*
运算符
在TWO steps
中
如果有人能给我这个问题的答案和解释,那将是非常有帮助的
With TWO STEPS I mean suppose you are running a loop (i=0;i<7;i++) in that case number of steps will be >2, also TYPE CONVERSION, DIVISION,ADDITION etc ( Counts for steps ).
# 1 楼答案
您可以简单地使用七分之一除法:
这是否算作“两步”完全取决于您的定义
# 2 楼答案
您可以使用
BigDecimal
&;它的multiply
方法。几乎所有东西都能用# 3 楼答案
您还可以对整数执行以下操作:
# 4 楼答案
在C中,以下hack应该适用于IEEE single precision floating point format中存储的浮点:
这是两个步骤(一个整数加法,一个浮点减法),这取决于你计算的步骤。考虑到C++或多或少地与C兼容,我相信类似的技巧也应该是可能的。p>
然而,请注意,对于subnormal、无限或NaN输入,这种黑客通常不会给出正确的结果,对于大小如此之大以至于将它们乘以8将溢出的输入,也不会给出正确的结果
将代码调整为使用double而不是float留给读者作为练习。(提示:魔法数字是52。)
# 5 楼答案
假设在作用域中定义了
在C++中,可以使用标准的函子(第一步:创建函子,第二步:调用函子):float x
或double x
。然后,我看到了在不使用*
运算符的情况下将其乘以7的以下可能性:或者只使用除法(因为编译器已经计算了
1.0 / 7.0
,这只是一个步骤):或者使用
*=
操作符(从技术上讲,它不是*
操作符,但它只是一个步骤):或者在对数刻度中使用加法(这不是非常严重的,因为这需要两个以上的“步骤”):
另一种选择是使用汇编指令,但我现在不想写它,因为它太复杂了
如果
x
是一个整数,则位移位是另一个选项,但不推荐:# 6 楼答案
加上