自己又写了一个大数乘法,请各位指导。
#include <iostream>#include <cstring>
#include <cmath>
using namespace std;
const int Max=100;
int a[Max],b[Max];
int result[Max+1][Max+1];
int main()
{
string s1,s2;
cin>>s1>>s2;
//int column=max(s1.length(),s2.length());//列
//int row=min(s1.length(),s2.length());//行
if(s1.length()<s2.length())
{
string t=s1;
s1=s2;
s2=t;
}
memset(result,0,sizeof(result));//把数组中的元素都清零
for(int i=s2.length()-1;i>=0;--i) //模拟乘法运算每位依次相乘
for(int j=Max-i,l=Max-i;j>Max-s1.length()-i;--j)//l为Max和s2长度之间的距离
result[i][j]=(s2[i]-'0')*(s1[j-(l-s1.length())-1]-'0');
//处理进位
for(int i=0;i<s2.length();++i)
for(int j=Max;j>=Max-(s1.length()+s2.length())+1;--j)
{
result[s2.length()][j]+=result[i][j];
if(result[s2.length()][j]/10)//如果不只有一位数,就有进位
{
result[s2.length()][j-1]+=result[s2.length()][j]/10;
result[s2.length()][j]%=10;
}
}
for(int i=0;i<Max+1;++i)
if(result[s2.length()][i]==0)
continue;
else
cout<<result[s2.length()][i];
cout<<endl;
return 0;
}