递归地乘以bignums

时间:2014-12-10 00:45:14

标签: c algorithm recursion

我在弄清楚如何递归地增加bignums方面遇到了一些麻烦。对于这个问题,我必须使用fgets输入两个字符串,如果字符串由完全数字组成,那么我要添加两个"数字"一起递归。我能够做到这一点。

接下来的部分是将fgets的第一个数字输入乘以一个字符d,该字符应该代表数字2-9。我也必须递归地做这件事。最后,我坚持的部分是弄清楚如何递归地乘以这两个数字。

为了将两个bignums加在一起,我编写了一个函数,它基本上从右到左遍历数字,在递归过程中添加数字,并将结果存储在函数时间内增长的字符数组中。基本上,我的结果数组是相反的顺序,这意味着我的数组的第一个元素实际上不是和的第一个数,而是最后一个。但是,我通过使用for循环以相反的顺序打印元素来解决这个问题。

对于使用范围为2-9的char d的递归乘法,我有一个类似的算法,其结果与实际产品的顺序相反,但同样,我能够解决这个问题。现在我在找到如何将这两个bignums相乘时遇到了一些麻烦。

我的想法是,我可以通过在第一个字符串乘以最后一个元素和第二个元素的第二个到最后一个元素上调用我的单位数乘法算法,以某种方式使用长乘法/等级学校乘法的方法string,然后调用我的sum函数将它们加在一起并将结果存储在一个名为accumulation的变量中,然后在递归中重复此过程。

然而,我遇到的一些问题是我的单位数乘法递归算法以相反的顺序返回结果,因此我无需将两个结果一起添加。此外,当第一个字符串乘以第二个字符串的倒数第二个元素时,我必须将结果乘以10(因为这个数字在十位),但我不太确定如何实现任

你们有没有关于如何使用递归(无循环)解决这个问题的想法?结果应如下所示:

First number > 57983985376

Second number > 543647645777735

Sum is 543705629763111

57983985376 times 2 is 115967970752

...

57983985376 times 9 is 521855868384

Product is 31522857142473014386403360

0 个答案:

没有答案