高精度计算,实际上就是模拟竖式计算,代码如下,请慢慢消化,如有不足或建议,请在评论区留言
#include <bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[1001];
void init(int a[])
{
string s;
cin>>s;
a[0]=s.length();
for(int i=1 ;i<=a[0]; i++)
{
a[i]=s[a[0]-i]-'0';
}
}
void print(int a[])
{
for(int i=a[0]; i>=1; i--)
{
cout<<a[i];
}
}
void multiply(int a[],int b[])
{
memset(c,0,sizeof(c));
for(int i=1; i<=a[0]; i++)
{
for(int j=1; j<=b[0]; j++)
{
c[i+j-1]+=a[i]*b[j];
}
}
int len=a[0]+b[0]-1,g=0;
for(int i=1; i<=len; i++)
{
c[i]+=g;
g=c[i]/10;
c[i]%=10;
}
while(g!=0)
{
c[++len]=g%10;
g/=10;
}
c[0]=len;
}
int main()
{
init(a);
init(b);
multiply(a,b);
if((a[1]==0 && a[0]==1) || (b[1]==0 && b[0]==1))
{
cout<<0;
}
else
{
print(c);
}
return 0;
}