java - 在java中实现埃及算法

标签 java algorithm data-structures recursion multiplication

我想在 Java 中仅使用加法、减法和比较来递归地找到两个数字的乘法。所以,我用谷歌搜索,找到了满足问题要求的 Egyptian Algorithm

但是,我不确定在到达基本情况后如何找到乘法结果。

例子:

13 x  30

1  -- 30

2  -- 60

4  -- 120

8  -- 240 //we stop here because the double of 8 is larger than 13

为了找到结果,我们将 左列 中等于 13 的数字相加,即 1+4+8,另一方面,我们将其相反的数字相加从 右列 中,它们是 30+120+240 = 390,这就是结果。

但是现在如何以编程方式完成最后一部分?如何检查要添加哪些号码?我希望你们明白我的意思。只需要提示。

最佳答案

这是解决问题的伪代码:

function egyptian(left, right)
  prod := 0
  while (left > 0)
    if (left is odd)
      prod := prod + right
    left := halve(left)
    right := double(right)
  return prod

基本上,与其等到最后,更容易在创建模板时检查模板的每一行,如果它属于输出则求和。我在 my blog 讨论了这个算法.

关于java - 在java中实现埃及算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13178438/

相关文章:

c++ - C++结构语法 “a : b”是什么意思

c# - 有没有比 TextWriter/StringBuilder 更高效的文本后台处理程序

java - 为什么我们可以向 LinkedList 添加 null 值,尽管在 Deque 接口(interface)中强烈反对这样做?

java - WebDriver 中不支持复合类名错误

java - 在 Java 中从数组制作直方图的最有效方法

java - 如何在不损失质量的情况下减小 BufferedImage 大小

algorithm - 求解方程组 :

c - 图论 - 用有限数量的路线填充节点

java - 当按下设备上或底部栏上的后退按钮时,不会调用 onBackPressed

java - 在同一个项目中使用 gradle war 和 ear 插件是否可能/明智?