【数据结构】大数相乘

#include<bits/stdc++.h>
using namespace std;
#define Maxsize 1101

int main()
{
        int intnum1[Maxsize],intnum2[Maxsize];
        int n1=0,n2=0;
cin>>intnum1>>intnum2; int *result=new int[n1+n2];// 分配一个空间,用来存储运算的结果,num1长的数 * num2长的数,结果不会超过num1+num2长
memset(result,0,sizeof(int)*(n1+n2)); // 9 8 // × 2 1 //------------- // (9)(8) <---- 第1趟: 98×1的每一位结果 // (18)(16) <---- 第2趟: 98×2的每一位结果 //------------- // (18)(25)(8) <---- 这里就是相对位的和,还没有累加进位 //--------------------- int i=0,j=0; for(i=0;i<n1;i++) // 先不考虑进位问题,根据竖式的乘法运算,num1的第i位与num2的第j位相乘,结果应该存放在结果的第i+j位上 { for(j=0;j<n2;j++) { result[i+j+1]+=intnum1[i]*intnum2[j];//注意在此时+=,9+16在同一下标操作(因为进位的问题,最终放置到第i+j+1位) }//空出了result[0]的位置 看嘛i=j=0的时候直接result[1]了 } i--;j--;//!!!一定要记得i--,j--;实际的i和j最后出循环多加了1 for(int k=i+j+1;k>0;k--)//单独处理进位,从个位处理的数开始,即最后的下标 { if(result[k]>=10&&result[k]<100)//进位为10了 { result[k-1]+=result[k]/10;//注意是+= result[k]%=10; } } for(int m=0;m<=i+j+1;m++) { if(result[0]==0) continue; else cout<<result[m]; } }

猜你喜欢

转载自www.cnblogs.com/yundong333/p/10586103.html