输入两个很大的正数(用C字符串表示),输出他们的乘积,将设不考虑非法输入。

 #include<iostream>
#include<cassert>
void multiply(const char *a,const char *b)
{
assert(a!=NULL && b!=NULL);
int i,j,ca,cb,*s;
ca=strlen(a);
cb=strlen(b);
s=(int *)malloc(sizeof(int)*(ca+cb)); //分配存储空间
for(i=;i<ca+cb;i++)
s[i]=; //每个元素赋初值为0 for(i=;i<ca;i++)
for(j=;j<cb;j++)
s[i+j+]+=(a[i]-'')*(b[j]-''); //两个嵌套的for循环,将字符串中的数字通过-‘0’
for(i=ca+cb-;i>=;i--) //转换为十进制数字
if(s[i]>=)
{
s[i-]+=s[i]/;
s[i]%=;
}

char *c=(char *)malloc((ca+cb)*sizeof(char));
i=;
while(s[i]==)
i++;
for(j=;i<ca+cb;i++,j++) //将十进制数字转换为字符,存储到字符数组中
c[j]=s[i]+'';
c[j]='\0';
for(i=;i<ca+cb;i++)
std::cout<<c[i];
std::cout<<std::endl;
free(s);
free(c);
} int main()
{
const char *strnum1="";
const char *strnum2="";
multiply(strnum1,strnum2);
return ;
}
上一篇:题解——洛谷P4767 [IOI2000]邮局(区间DP)


下一篇:Android下实现一个简单的计算器源码