通过加法模拟乘法的算法(伪代码)

时间:2013-10-21 18:39:13

标签: algorithm computer-science pseudocode

我正在尝试设计一种算法来通过加法来模拟乘法。输入必须是零,正或负。

if "a" & "b" are two numbers 
than
 if (a)(b)=ab or 2*4=8
than a+a+a+a = ab or 2+2+2+2 =8

我有一个问题需要解决,但我还是无法解决。我设计了以下算法/伪代码:

  1. 如果C是我们在添加后必须存储的地方,并且最初是C = 0
  2. 将C添加到“a”并存储在C(0 + 2 = 2)
  3. 从“b”中减去1并存储在“b”中。 (4-1 = 3)
  4. 如果“b = 0”STOP。否则转到第2步。
  5. 虽然此算法在b > 0时有效,但如果b等于-1或零则失败。算法一直运行而不会停止。

    如何修复算法以使其适用于负数?

2 个答案:

答案 0 :(得分:4)

这是最简单的方法:

int x = 5;
int y = -10;

int mul = 0;
if (x > 0)
    for (int i=0; i<x; i++)
        mul += y;
else
    for (int i=0; i>x; i--)
        mul -= y;
// mul now x*y;

答案 1 :(得分:1)

以下是两个简单的提示。

  1. 在添加c和a之前检查b = 0,并在步骤4中使用uncoditionnal goto替换conditionnal goto语句。

  2. 请记住2 * -4 = - (2 * 4)。因此,您可以在代码中尽早检查b是否为负数,如果为负数则将变量设置为-1,如果为正数或空值则设置为+1。然后将b设置为其自身的绝对值,并让代码继续,就像您编写它一样。然后在最后一刻,将总和乘以该临时变量。那你就得到了正确答案。

  3. 我不会给你生成的伪代码,因为这真的是你必须自己做的事情;)祝你好运。