不使用*运算符将数字相乘
Multiplying a number without using * operator
我正在学习一个编程类,有人问我这个棘手的问题,直到课程结束都没有得到回答。
问题:
如何将任何输入(Float、int等(乘以7,without using the
*
运算符在CCD_ 3中。
如果有人能给我这个问题的答案和解释,那将是非常有帮助的。
通过两个步骤,我的意思是假设您在中运行一个循环(I=0;I<7;I++(步骤的情况数将>2,也就是TYPE CONVERSION,DIVISION、ADDITION等(步骤计数(
假设范围中定义了float x
或double x
。然后我看到了在不使用*
运算符的情况下将其乘以7的以下可能性:
在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)
这是否算"两步走"完全取决于你的定义。
添加
//initialise s as the number to be multiplied
sum=0
for(i=0;i<7;i++)
sum+=s
在C中,以下破解应该适用于以IEEE单精度浮点格式存储的浮点:
#include <stdint.h>
float mul7 (float x) {
union {
float f;
uint32_t i;
} u;
u.f = x;
u.i += (3 << 23); /* increment exponent by 3 <=> multiply by 8 */
return u.f - x; /* 8*x - x == 7*x */
}
这是两个步骤(一个整数加法,一个浮点减法(,有点像,取决于你计算的步骤。考虑到C++或多或少与C向后兼容,我相信类似的技巧也应该存在。
然而,请注意,这种破解通常不会为亚正常、无限或NaN输入提供正确的结果,也不会为幅度大到将其乘以8会溢出的输入提供正确结果。
将代码调整为使用doubles而不是float留给读者练习。(提示:幻数是52。(
您也可以对整数执行以下操作:
( x<< 3) - x
// String num = "10";
// int num = 10;
float num = 10;
BigDecimal bigD = new BigDecimal(num);
BigDecimal seven = new BigDecimal(7);
System.out.println(seven.multiply(bigD));
您可以使用BigDecimal
&其CCD_ 12方法。适用于几乎所有的东西。
定义"两个步骤"。。。
float result = 0.0f;
float input = 3.14f;
int times = 7;
// steps
while (times--)
result += input;
编辑:除以(1/7(不适用于int
类型。此外,在某些语言中,为了使其与浮点类型一起工作,您必须将它们标记为浮点:
result = input / (1.0f / 7.0f);
将7乘以x。
for(int i=0; i<10; i++)
result = result+7;
- 如何通过使用 2 位或更多数字的 XOR 运算符来执行此操作C++问题
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- Arduino IDE 错误 - 无法找到数字文字运算符"运算符""f900ff"
- 移位运算符如何影响无符号数字
- 找不到数字文字运算符“运算符”“+BLA”
- 在没有比较运算符的情况下查找 2 个数字之间的最小值
- 长方程加法/减法计算器,从文本文件中提取运算符和数字
- 错误:找不到数字文字运算符"运算符 " " U"?
- 用户输入逻辑运算符符号或数字,如果输入字符或字符串则无效
- 使用按位运算符将数字相乘时的错误
- 当我们有数字和字符串时,>>运算符如何工作
- 重载输出运算符给出十六进制数字而不是字符串
- 将字符串与数字进行比较,而无需编写太多运算符重载函数
- 为具有一个数字数据成员的类定义所有比较运算符的方便方法
- 如何允许用户输入数字和运算符
- 比较 unicode 和 wchar_t C++:"找不到数字文字运算符"运算符" " F""
- C++:如何将普通话(字符串)分配给用户使用数组输入的数字 &运算符问题
- 如何在不使用任何标准运算符(如 *,-,/,% 等)的情况下将数字与 3.5 相乘
- 重载运算符>>并向字符串添加数字
- 重载对象前面带有数字的运算符+(int)