AcWing 793. 高精度乘法 (数组版)
原题链接
简单
作者:
GRID
,
2021-03-16 14:33:02
,
所有人可见
,
阅读 212
分析
- 将长数字s输入进来,用数组a[],b[]存储每一位。
- 设置一个临时数组temp[],长度为l1+l2,计算每一位的值
- 输出结果
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10,M = 200000;
int a[M],b[M],l1,l2;
char s[N];
void print(int a[])
{
int k=M-1;
while(k && !a[k]) k--; //去除前导0
for(int i=k;i>=0;i--) cout<<a[i];
}
void mul(int a[],int b[])
{
int t=0,temp[l1+l2];
memset(temp,0,sizeof temp);
for(int i=0;i<l1;i++)
{
for(int j=0;j<l2;j++)
{
temp[i+j]+=a[i]*b[j]; //计算i+j位的总和
}
}
for(int i=0;i<l1+l2;i++) //将temp每一位的具体值算出来
{
t+=temp[i];
temp[i]=t%10;
t/=10;
}
memcpy(a,temp,sizeof temp);
}
int main()
{
scanf("%s",s);
l1=strlen(s);
for(int i=0;i<l1;i++) a[l1-i-1]=s[i]-'0'; //字符串转换到数组中
scanf("%s",s);
l2=strlen(s);
for(int i=0;i<l2;i++) b[l2-i-1]=s[i]-'0';
mul(a,b);
print(a);
return 0;
}