乘法的思路和加减法的有亿点点不同
第一,要知道两个长度为x和y的数乘了之后的最大以及最小的长度是多少。
第二,知道对于某一个数字来说,它是怎么得到的。
1*1=1,11*1=11,111*11=1221,得出:最小的长度是x+y-1。
9*9=81,99*99=9801,得出:最大的长度是x+y.
111
* 11
___
111
111
___
1221
得出:第一个数的第x位乘以第二个数的第y位,得出的结果要放在第x+y-1位。
#includeusing namespace std; const int N=10007; char s[N]; struct node{ int num[N],len; void init(){ memset(num,0,sizeof(num)); len=1; } void read(){ scanf("%s",s+1); len=strlen(s+1); for(int i=1;i<=len;i++) num[len-i+1]=s[i]-'0'; } void write(){ for(int i=len;i>0;i--) printf("%d",num[i]); printf("n"); } }s1,s2,ans; node operator*(node a,node b){ node c; c.init(); c.len=a.len+b.len-1; for(int i=1;i<=a.len;i++){ for(int j=1;j<=b.len;j++){ c.num[i+j-1]+=a.num[i]*b.num[j]; if(c.num[i+j-1]>=10){ c.num[i+j]+=c.num[i+j-1]/10; c.num[i+j-1]%=10; } } } while(c.num[c.len+1]!=0) c.len++; return c; } int main(){ s1.read(); s2.read(); ans=s1*s2; ans.write(); return 0; }



