#include<bits/stdc++.h>
using namespace std;
const int N=4005;
int a[N],b[N],c[N];
char ad[N],bd[N];
int lena,lenb,lenc;
int main()
{
memset(a,0,sizeof(a)); //全部设成0
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
scanf("%s%s",ad,bd);
lena=strlen(ad);
lenb=strlen(bd);
for(int i=0;i<lena;i++)
{
a[i]=ad[lena-i-1]-'0'; // 倒序读入
}
for(int i=0;i<lenb;i++)
{
b[i]=bd[lenb-i-1]-'0';
}
for(int i=0;i<lena;i++)
{
for(int j=0;j<lenb;j++)
{
c[i+j]+=a[i]*b[j]; // 规律:c的第i+j位等于a的第i位乘以b的第j位-1,像现在这样i和j从零开始就不用减1
// c[i+j-1]%=10; // 这些不要放在lenb的循环里,在下面lenc的循环里再过一遍并进位
// c[i+j]+=c[i+j-1]/10;
}
}
lenc=lena+lenb; // c位数的上界是a和b的位数之和,可以去搜搜证明
for(int i=0;i<lenc;++i) c[i+1]+=c[i]/10,c[i]%=10; // 在这里进位哦
while(c[lenc-1]==0&&lenc-1>1) lenc--; // 除掉前面的0
for(int i=lenc-1;i>=0;i--) printf("%d",c[i]); //从后往前输出,不用多说了
return 0;
}
高精乘模板,他来了
最新推荐文章于 2024-05-22 00:44:55 发布
这段代码展示了如何使用C++实现两个数的高精度乘法。通过倒序读入输入数字,然后逐位相乘并进位,最终输出结果。代码中避免了额外的进位操作,直接在最后统一进行。
摘要由CSDN通过智能技术生成