怎么在c++中实现一个大数相乘算法

  介绍

这期内容当中小编将会给大家带来有关怎么在c++中实现一个大数相乘算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

普通的乘法计算用int,长,双都可以解决,但有时候需要处理的数字过大,从而产生溢出,以下是实现任意长度的<>强正整数 A * B的算法,即大数相乘,这个算法比较简单易懂,思路如下:

1,在主函数用char型数组A和B分别保存输入的数字A和B;

2,对字符串数A和B组每一位互相相乘,像小学时候学的竖式乘法,结果保存在字符串数组,但是不进行进位处理;
3,对字符串数组年代每一位进行进位处理;

4,将字符串数组年代赋给字符型数组C,返回结果。

<强> char版本:

//大数相乘,实现大数A * B   char *, getMultiplyValue (char  [], char  b[]),//参数:char型数一的组数组名;参数b: char型数b组的数组名;   {   ,int  i, j, ca, cb, * s cs;   ,char  * c;   ,   ,ca=strlen(),,//求字符串数组一的长度   ,cb=strlen (b);,//求字符串数b组的长度   ,c=ca + cb,,   ,年代=new  int [c];   ,c=new  char [c];   ,   ,//初始化   ,(i=0; i< cs;我+ +)   ,年代[我]=0;   ,   ,//直接纵向求和,不处理进位   ,(我=0;i

另外,附上串版本的,

# include  & lt; string>   using  namespace 性传播疾病;   ,//大数相乘,实现大数A * B   string  getMultiplyValue (string  string  b),//参数:字符串型的变量名;参数b:字符串型b的变量名;   {   ,int  i, j, ca, cb, cs, *年代;   ,string 总和;   ,   ,ca=a.length();,//求字符串一个的长度   ,cb=b.length();,//求字符串b的长度   ,年代=new  int (cs=ca + cb);   ,   ,   ,//初始化   ,(i=0; i< cs;我+ +)   ,年代[我]=0;   ,   ,//直接纵向求和,不处理进位   ,(我=0;i

下面给出的是char版本的运行实例(string版本同理),更彻底教会大家如何使用,

# include  & lt; iostream>   using  namespace 性传播疾病;   int  main ()   {   b, char  [255], [255];   ,   ,,,cin>的在a>的在b,,,,,,//输入数字a, b   ,   ,cout<& lt; getMultiplyValue (a, b) & lt; & lt; endl;,//输出a * b   ,   ,return  0;   }

上述就是小编为大家分享的怎么在c++中实现一个大数相乘算法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

怎么在c++中实现一个大数相乘算法