在不使用 * 运算符的情况下乘以数字 [已关闭]
我正在上编程课,被问到这个棘手的问题,直到课程结束才得到解答。
问题:
如何将任何输入(Float,int 等)乘以 7,运算符在 .without using the
*
TWO steps
如果有人能给我这个问题的答案和解释,那将是非常有帮助的。
对于两个步骤,我的意思是假设您正在运行一个循环(i = 0;i<7;i ++),在这种情况下,步骤数将>2,也键入转换,除法,加法等(步骤计数)。
我正在上编程课,被问到这个棘手的问题,直到课程结束才得到解答。
问题:
如何将任何输入(Float,int 等)乘以 7,运算符在 .without using the
*
TWO steps
如果有人能给我这个问题的答案和解释,那将是非常有帮助的。
对于两个步骤,我的意思是假设您正在运行一个循环(i = 0;i<7;i ++),在这种情况下,步骤数将>2,也键入转换,除法,加法等(步骤计数)。
假定 或 在作用域中定义。然后,我看到以下可能性,可以在不使用运算符的情况下将其乘以7:float x
double 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
您可以简单地使用除以七分之一:
x / (1.0 / 7)
这是否算作“两个步骤”完全取决于您的定义。