在不使用 * 运算符的情况下乘以数字 [已关闭]

2022-09-02 00:13:14

我正在上编程课,被问到这个棘手的问题,直到课程结束才得到解答。

问题

如何将任何输入(Float,int 等)乘以 7,运算符在 .without using the*TWO steps

如果有人能给我这个问题的答案和解释,那将是非常有帮助的。

对于两个步骤,我的意思是假设您正在运行一个循环(i = 0;i<7;i ++),在这种情况下,步骤数将>2,也键入转换,除法,加法等(步骤计数)。


答案 1

假定 或 在作用域中定义。然后,我看到以下可能性,可以在不使用运算符的情况下将其乘以7:float xdouble x*

在C++中,您可以使用标准函子(第一步:创建函子,第二步:调用函子):

x = std::multiplies<float>()(x, 7.0f);  // if x is a float
x = std::multiplies<double>()(x, 7.0);  // if x is a double

或者只使用除法(由于编译器已经计算,这只是一个步骤):1.0 / 7.0

x = x / (1.0f / 7.0f);  // if x is a float
x = x / (1.0  / 7.0);   // if x is a double

或者使用运算符(从技术上讲,它不是运算符,但它只是一个步骤):*=*

x *= 7.0f;  // if x is a float
x *= 7.0;   // if x is a double

或者在对数刻度中使用加法(这不应该被认真对待,以及这需要两个以上的“步骤”):

x = exp(log(x) + log(7.0));

另一种选择是使用汇编指令,但我现在不想写它,因为它太复杂了。

如果 是整数,则位移位是另一种选择,但不建议这样做x

x = (x << 3) - x;   // (x * 8) - x

答案 2

您可以简单地使用除以七分之一:

x / (1.0 / 7)

这是否算作“两个步骤”完全取决于您的定义。


推荐