在不使用任何二元运算符的情况下乘以两个整数

时间:2011-06-17 13:09:57

标签: c++

如何在不使用任何二元运算符的情况下乘以两个整数?我知道如何使用递归,但递归将使用“==”。

2 个答案:

答案 0 :(得分:10)

您可以对无符号整数using only the increment and decrement运算符执行此操作:

unsigned x(?), y(?);
unsigned r(0);
while(x--) {
    unsigned z(y);
    while(z--) {
        r++;
    }
}

这些是我上面用来避免使用二元运算符的技巧,但仍然可以获得相同的效果:

  • 使用类似构造函数的语法初始化变量:不需要赋值运算符的符号(以防万一有人在不知不觉中声称这种初始化是一种赋值);
  • 使用递增和递减而不是添加或减去一个;
  • 利用整数类型的隐式转换到bool以在循环条件中使用:这样我可以使用运算符与0进行比较;

该算法的工作原理是使内循环体运行x * y次。很明显,外循环运行x次。内部循环始终运行y次,因为我小心翼翼地永远不会更改y的值,方法是将其复制到另一个变量中(同样,不使用赋值运算符)。因此,最终结果是r递增x * y次,为我们提供了所需的结果。

答案 1 :(得分:-1)

试试这个:

x * y:

result = 0
while(x--)  
    while(y--)
        result++;

result = (x<0) ? result * -1 : result
result = (y<0) ? result * -1 : result

使用Martinho的帮助