高精度正整数乘法
目录
乘法略微有一点难,废话不多说,直接开始
学习之前你需要掌握:for循环,while循环,数组,字符串
正片开始
老规矩,输入,求长度,导入
string s1,s2;
cin>>s1>>s2;
la=s1.size(),lb=s2.size();
for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
接下来要开始“乘”了
思想:c数组的第i位=a数组的第i位*b数组的第i位+进位+c数组的第i位
for(i=0;i<la;i++){
x=0;
for(j=0;j<lb;j++){
c[i+j]=a[i]*b[j]+x+c[i+j];
x=c[i+j]/10;
c[i+j]%=10;
}
c[i+lb]=x;
}
最后,去零!!!
lc=la+lb;
while(c[lc]==0 && lc>0) lc--;
输出,完成!
while(c[lc]==0 && lc>0) lc--;
for(i=lc;i>=0;i--) cout<<c[i];
全篇代码
//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=10100;
int a[mx],b[mx],c[mx];
int la,lb,lc,i,j,x;
int main()
{
string s1,s2;
cin>>s1>>s2;
la=s1.size(),lb=s2.size();
for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
for(i=0;i<la;i++){
x=0;
for(j=0;j<lb;j++){
c[i+j]=a[i]*b[j]+x+c[i+j];
x=c[i+j]/10;
c[i+j]%=10;
}
c[i+lb]=x;
}
lc=la+lb;
while(c[lc]==0 && lc>0) lc--;
for(i=lc;i>=0;i--) cout<<c[i];
return 0;
}
谢谢