Y总的那个是高精度乘以低精度=。=
下面这个是高精度乘以高精度,也是模仿现实的乘法只不过我们要错开位置相加
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
int a[10000],b[10000],c[10000];
int main()
{
string A,B,C;
cin>>A;
cin>>B;
if(B.size()>A.size());
C=B,B=A,A=C;
for(int i=0;i<A.size();i++)
a[i]=A[A.size()-i-1]-'0';
for(int i=0;i<B.size();i++)
b[i]=B[B.size()-i-1]-'0';
int i,j;
int t=0,len1=A.size(),len2=B.size();
for(i=0;i<=len2;i++)
for(j=0;j<=len1;j++)
{
t+=a[j]*b[i];
c[i+j]+=t%10;
t/=10;
}
for(i=1;i<len1+len2;i++)
if(c[i]>9)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
int len=len1+len2;
while(c[len]==0&&len>0)len--;
for(int i=len;i>=0;i--)
cout<<c[i];
}
上面这个是日常中竖式乘法的模拟
下面和Y总的写法一样,只不过把B的高精度单独看作一个个的低精度组成的数例如
132✖12
会看成132✖2然后错位相加132✖1
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
int a[10000],b[10000],c[10000];
int main()
{
string A,B,C;
cin>>A;
cin>>B;
if(B.size()>A.size());
C=B,B=A,A=C;
for(int i=0;i<A.size();i++)
a[i]=A[A.size()-i-1]-'0';
for(int i=0;i<B.size();i++)
b[i]=B[B.size()-i-1]-'0';
int i,j;
int t=0,len1=A.size(),len2=B.size();
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
t+=a[i]*b[j];
c[i+j]+=t%10;
t/=10;
}
for(i=1;i<len1+len2;i++)
if(c[i]>9)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
if(t)c[i+j]=t;
int len=len1+len2;
while(c[len]==0&&len>0)len--;
for(int i=len;i>=0;i--)
cout<<c[i];
}