找规律
- 把两乘数用数组表示,如下图进行相乘
- 观察a、b、c字母的下标特点
- 发现ci+j-1=∑ai*bj。如c1=a1*b1,c2=a2*b1+a1*b2
- 如果脚标从0开始,关系为ci+j=∑ai*bj
- 两乘数长度为m、n,则积的长度为m+n(不超过)
- 第i位乘第j位,所得的结果在第i+j位上,如果有进位,则进位在i+j+1位上。
代码
#include <iostream>
#include<cstring>
using namespace std;
void largeMulti(char* a,char* b,char* c){
int la=strlen(a);
int lb=strlen(b);
int lc=la+lb;
memset(c,0,lc+1);
for(int i=0;i<la;++i)
for(int j=0;j<lb;j++){
c[i+j]+=(a[i]-'0')*(b[j]-'0');
c[i+j+1]=c[i+j]/10;
c[i+j]%=10;
}
for(int i=0;i<lc;++i){
c[i]+='0';
}
if(c[lc-1]=='0')
c[lc-1]='\0';
}
int main(){
char a[200],b[200],c[200];
scanf("%s%s",a,b);
strrev(a);
strrev(b);
largeMulti(a,b,c);
strrev(c);
cout<<c<<endl;
return 0;
}