我希望在仅使用加法,减法和比较的情况下递归地找到Java中两个数字的乘法。所以,我用谷歌搜索,发现符合问题要求的Egyptian Algorithm
。
但是,我不确定在到达base case
后如何找到乘法结果。
示例:
13 x 30
1 -- 30
2 -- 60
4 -- 120
8 -- 240 //we stop here because the double of 8 is larger than 13
要查找结果,我们会添加left column
中等于13 1+4+8
的数字,另一方面我们会添加来自right column
的相反数字30+120+240 = 390
{ {1}}结果就是这样。
但是现在如何以编程方式完成最后一部分?如何查看要添加的号码?我希望你们明白我的观点。提示只需要。
答案 0 :(得分:1)
这是解决问题的伪代码:
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讨论了这个算法。
答案 1 :(得分:0)
以相反的顺序循环创建结果
每次,如果您的被乘数余数(开始等于乘数)大于左列中的数字,则从乘数中减去左列,并将右列添加到结果中(从零开始)。
答案 2 :(得分:0)
您可能已找到此维基百科article。
查看“分解”一节的最后一部分。你会找到你必须实现的子算法。
答案 3 :(得分:0)
好的,我是用暴力算法做的。这是一个BigO-(n)。我确信有更有效的方法来实现它。目前。我正在解决这个问题。
谢谢你们!