1 #include<iostream>
2 #include<cassert>
3 void multiply(const char *a,const char *b)
4 {
5 assert(a!=NULL && b!=NULL);
6 int i,j,ca,cb,*s;
7 ca=strlen(a);
8 cb=strlen(b);
9 s=(int *)malloc(sizeof(int)*(ca+cb)); //分配存储空间
10 for(i=0;i<ca+cb;i++)
11 s[i]=0; //每个元素赋初值为0
12
13
14 for(i=0;i<ca;i++)
15 for(j=0;j<cb;j++)
16 s[i+j+1]+=(a[i]-'0')*(b[j]-'0'); //两个嵌套的for循环,将字符串中的数字通过-‘0’
17 for(i=ca+cb-1;i>=0;i--) //转换为十进制数字
18 if(s[i]>=10)
19 {
20 s[i-1]+=s[i]/10;
21 s[i]%=10;
22 }
23
24 char *c=(char *)malloc((ca+cb)*sizeof(char));
25 i=0;
26 while(s[i]==0)
27 i++;
28 for(j=0;i<ca+cb;i++,j++) //将十进制数字转换为字符,存储到字符数组中
29 c[j]=s[i]+'0';
30 c[j]='\0';
31 for(i=0;i<ca+cb;i++)
32 std::cout<<c[i];
33 std::cout<<std::endl;
34 free(s);
35 free(c);
36 }
37
38 int main()
39 {
40 const char *strnum1="123";
41 const char *strnum2="456";
42 multiply(strnum1,strnum2);
43 return 0;
44 }