我正在尝试设计一种算法来通过加法来模拟乘法。输入必须是零,正或负。
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
我有一个问题需要解决,但我还是无法解决。我设计了以下算法/伪代码:
虽然此算法在b > 0
时有效,但如果b
等于-1或零则失败。算法一直运行而不会停止。
如何修复算法以使其适用于负数?
答案 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)
以下是两个简单的提示。
在添加c和a之前检查b = 0,并在步骤4中使用uncoditionnal goto替换conditionnal goto语句。
请记住2 * -4 = - (2 * 4)。因此,您可以在代码中尽早检查b是否为负数,如果为负数则将变量设置为-1,如果为正数或空值则设置为+1。然后将b设置为其自身的绝对值,并让代码继续,就像您编写它一样。然后在最后一刻,将总和乘以该临时变量。那你就得到了正确答案。
我不会给你生成的伪代码,因为这真的是你必须自己做的事情;)祝你好运。