只需正确代码,可不需优化
#include<bits/stdc++.h>
using namespace std;
/*
12*34=408
例1:
21
43 *
------------
84 第9行
63 第10行
------------
804 第12行 倒序的!!
so:12*34=408
*/
const int MAXN=1e4+10;
int abc[MAXN][MAXN];//第9行~第10行
int av[MAXN];//第1个乘数
int bv[MAXN];//第2个乘数
int cv[MAXN];//积
int main( ){
string a,b;cin>>a>>b;
for(int i=0;i<a.length( );i++)av[i]=a[a.length( )-i-1]-'0';
for(int i=0;i<b.length( );i++)bv[i]=b[b.length( )-i-1]-'0';//把两个数(string a,b)转换成数组(int av[a.length( )],bv[b.length( )])
for(int i=0;i<b.length( );i++){
for(int j=0;j<a.length( );j++){
abc[i][j+i]+=av[j]*bv[i];
abc[i][j+i+1]+=abc[i][j]/10;//上一位进位
abc[i][j+i]=abc[i][j]%10;//这一位的值
//第9行~第10行 的数放入数组
}
}
for(int i=0;i<b.length( );i++){
for(int j=0;i<a.length( );j++){
cv[i]+=abc[i][j]+cv[i];
cv[i+1]+=cv[i]/10;//上一位进位
cv[i]=cv[i]%10;//这一位的值
//求积(第9行~第10行的和(第12行))cv[a.length( )+b.length( )+5]
}
}
bool flag=false;
for(int i=a.length( )+b.length( )+5;i>=0;i--){
if(cv[i]!=0&&flag==false){
flag=true;
cout<<cv[i];
}else cout<<cv[i];
}//输出积
return 0;
}