c++如何实现大数相乘算法

  介绍

这篇文章主要介绍c++如何实现大数相乘算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

首先说一下乘法计算的算法:同样是模拟人工计算时的方法。

从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加,得出最后结果。
计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。
我们以125 * 53为例来说明计算过程:

1,先算125 * 3 * 5得到15个1,3 * 2得6到10个,3 * 1得100年到3个,下面是存储结果的数组的形式

 C + +如何实现大数相乘算法

2,接下来算125 * 5 * 5得10到25个,2 * 5得到10个100,5 * 1得到5个1000;

 C + +如何实现大数相乘算法

3,乘法过程完毕。接下来从一个[0]开始向高位逐位处理进位问题。[0]留5下,把1加到一个[1]上,一个[1]变为32后,应留下2,把3加到一个[2]上……最终使得一里的每个元素都是1位数,结果就算出来了

 C + +如何实现大数相乘算法

结果就是6625 .

总结一个规律:即一个数的第位我和另一个数的第j位相乘所得的数,一定是要累加到结果的第i + j位上。这里i, j都是从右往左,从0开始数。
即:ans (i + j]=[我]* b [j]。

另外进位时要处理,当前的值加上进位的值再看本位数字是否又有进位;前导清零。

下面是c++代码实现:

# include   # include   # include   ,   ,   using  namespace 性传播疾病;   # define  MAX  1010,   ,   ,   int  main ()   {   string  std1, std2;   ,,cin>的在std1>的在std2;   int  length2 =, std1.length ();   int  length3 =, std2.length ();   int  (MAX),=, {0};   int  b (MAX),=, {0};   int 结果[2,*,MAX),=, {0};   int 小姐:=,0,,j =, 0;//将字符串转移到数组中,以方便计算,,注意是倒叙存储//即字符串123存为321,为的是将低位放在前面方便计算,   (小姐:=,length2 作用;1,j =, 0;,小姐:祝辞=,0;,我———,j + +)   {   [j],=, std1[我],安康;& # 39;0 & # 39;;   }   (小姐:=,length3 作用;1,j =, 0;,小姐:祝辞=,0;,我———,j + +)   {   b [j],=, std2[我],安康;& # 39;0 & # 39;;   }//将结果储存在,resullt中,结果[小姐:+,j],=,一个[我],*,b [j]是关键算法,   (小姐:=,0;,小姐:& lt;, length2;,我+ +)   {   时间=(j  0;, j  & lt;, length3;, j + +)   {   结果[小姐:+,j], +=,一个[我],*,b [j];   }   }   ,//从低位到高位进行进位   ,   (小姐:=,0;,小姐:& lt;, (length2 + length3);,我+ +)   {   如果结果[我],祝辞,9)   {   结果(i + 1), +=,结果[我]/10;   结果[我],%=,10;,   }   }//将前导0全部剔掉,比如我们结果是236年,在结果中//是这样存储的63200年……我们需要定位到第一个不为零的数,它的位置也就是小姐:,两数相乘,位数最多是两数位数之和   ,   (小姐:=,length2  +, lengrh3;,小姐:祝辞=,0,,,我——)   {   如果结果[我],==,0),继续;   else 断裂;   }//接着我继续输出,就是我们的结果,   (,,小姐:在=0;,我——)   [我]cout<& lt;结果;   return  0;   }

以上是“c++如何实现大数相乘算法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

c++如何实现大数相乘算法