1

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

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”停止。否则转到步骤 2。

虽然此算法在 时有效b > 0,但如果b等于 -1 或零则失败。该算法不断运行而从未停止。

如何修复我的算法,使其适用于负数?

4

2 回答 2

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;
于 2013-10-21T18:43:47.487 回答
1

这里有两个简单的提示给你。

  1. 在添加 c 和 a 之前检查 b=0,并将步骤 4 中的条件 goto 语句替换为非条件 goto。

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

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

于 2013-10-21T18:49:23.080 回答