大整数乘法—C++实现
自己通过用二维数组表来改写此算法。
引用博客文章链接:https://blog.csdn.net/qq_44731019/article/details/109367811?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164913780516782184653108%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164913780516782184653108&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-3-109367811.142v5control,157v4control&utm_term=%E5%A4%A7%E6%95%B4%E6%95%B0%E4%B9%98%E6%B3%95&spm=1018.2226.3001.4187
//大数乘法
#include<iostream>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
int lena=a.size();
int lenb=b.size();
int t[lenb][lena];//计算两两相乘二维表
for(int i=0;i<lenb;i++)
{
for(int j=0;j<lena;j++)
{
t[i][j]=(int(b[i])-48)*(int(a[j]-48));
//cout<<t[i][j]<<" ";
}
//cout<<endl;
}
int s[lena+lenb-1]={0};//错位加和表
int c[lena+lenb]={0};//进位表得到答案
for(int i=0;i<lenb;i++)
{
for(int j=i;j<lena+lenb-1;j++)
{
if(j<lena+i)s[j]+=t[i][j-i];
}
}
// for(int i=0;i<lenb+lena-1;i++)cout<<s[i]<<" ";
// cout<<endl;
for(int i=lenb+lena-2;i>=0;i--)
{
if(s[i]>=10)
{
c[i]=(c[i+1]+s[i])/10;
c[i+1]=(c[i+1]+s[i])%10;
//cout<<c[i+1]<<" ";//查看留位数
//cout<<c[i]<<" "<<endl;//查看进位数
}
else
{
c[i+1]+=s[i];
if(c[i+1]>=10)
{
c[i]+=c[i+1]/10;
c[i+1]%=10;
}
}
}
int ii=0;
if(c[0]==0)ii=1;
for(int i=ii;i<lenb+lena;i++)cout<<c[i];
}