美文网首页
大数相乘算法

大数相乘算法

作者: baby_double | 来源:发表于2018-09-21 14:53 被阅读0次

1、计算两个大数相乘的结果。
2、算法流程:
(1)大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存储数a,b;
(2)计算字符串a的的长度aLen即位数,计算字符串b的长度bLen.
(3)两个数相乘最大为aLen+bLen,整形sumLen=aLen+bLen;
(4)声明字符数组maxArr用于保存a,b中的更大者,声明整形maxLen保存a,b长度的更大者。声明字符数组minArr用于保存a,b中的更小者,声明整形minLen保存a,b长度的更小者。如下所示:


image.png

(5)创建整形数组sumArr用于保存相乘后的结果,创建整形数组tmpArr保存数a的某一位与数b各位相乘的结果,如下所示:


image.png
(6)更小的数minArr的各位(个位,十位,百位,千位等)依次和更大数minArr的各位相乘并存储在临时数组tmpArr中
image.png

3、具体代码:

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
 char* a="9999999";
 char* b="9999999";
 int aLen=strlen(a);
 int bLen=strlen(b);
 int sumLen=aLen+bLen;
 cout << "aLen="<<aLen<<" bLen="<<bLen<<<< "sumLen="<<sumLen<<endl;
 int minLen=0,maxLen=0;
 char* maxArr,minArr;

 if(aLen>bLen){
    maxArr=a;
    minArr=b;
    maxLen=aLen;
    minLen=bLen;
 }else{
     maxArr=b;
     minArr=a;
     maxLen=bLen;
     minLen=aLen;
 }

 int* sumArr=new int[sumLen];
 int* tmpArr=new int[sumLen];

 for(int i=0;i<sumLen;i++){
    sumArr[i]=0;
    tmpArr[i]=0;
 }

 int mulJin=0,addJin=0;

 for(int i=minLen-1;i>=0;i--){
    int k=--sumLen; 
    for(int j=maxLen-1;j>=0;j--){
        tmpArr[k]=((maxArr[j]-'0')*(minArr[i]-'0')+mulJin)%10;
        mulJin=((maxArr[j]-'0')*(minArr[i]-'0')+mulJin)/10;
        k--;
    }
    if(mulJin>0){
        tmpArr[k]=mulJin;
    }
    mulJin=0;
    for(int i=aLen+bLen-1;i>=0;i--){
    int tmp=(sumArr[i]+tmpArr[i]+addJin);
    sumArr[i]=tmp%10;
    addJin=tmp/10;
    }
    addJin=0;

    for(int i=0;i<aLen+bLen;i++){
      tmpArr[i]=0;
    }

}

 int t=0;
 while(true){
    if(sumArr[t]==0){
        t++;
    }else{
       break;
    }
 }
 for(;t<aLen+bLen;t++){
   cout << sumArr[t];
 }

return 0;}

相关文章

  • 大数相乘算法

    1、计算两个大数相乘的结果。2、算法流程:(1)大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存...

  • 大数相乘-算法

    参考文章 题目 思路 例如:计算98×21,步骤如下 Objective-C 版 swift 版 待更新

  • 大数相乘之Karatsuba算法

    问题大数相乘 计算123×456,其实12345和6789就是大数。 思路 这是分治算法思想的典型体现。计算机只会...

  • OC大数相加相乘算法

    前些天做了份笔试题,最后一道题是写一个大数相乘的算法,太久没做题了,也没有草稿纸,脑子没动起来,笔就开始天马行空了...

  • 大数相乘--golang简单实现

    大数乘法之golang实现所谓大数相乘(Multiplication algorithm),就是指数字比较大,相乘...

  • 算法之俩个大数相乘

    具体实现如下: 运行结果:

  • 大数相乘

    所谓大数相乘(Multiplication algorithm),就是指数字比较大,相乘的结果超出了基本类型的表示...

  • 大数相乘

  • 大数相乘

    两个大数相乘,这两个大数分别是a和b,现在分割成两部分,每一部分都是N位,假设是10进制的,其实对于2进制也同样适...

  • 大数相乘

网友评论

      本文标题:大数相乘算法

      本文链接:https://www.haomeiwen.com/subject/biianftx.html