这是个傻逼的题目是吧?但是这个事情一直很有需求,特别是C语言入门阶段。
解决方案有许多,我写了一个可以凑合的,不过问题也很严重的。
主要的问题是:内存泄漏。
原理谁都明白,就是模拟竖式计算,记着char的’1’和int的1之间差48就好了。
char* mul (char* a, char* b)
{
char* r;
int la,lb,lr;
int tr,ti,tb;
int i,j;
la = strlen(a);
lb = strlen(b);
lr = la+lb+1;
r = (char*)calloc(lr,sizeof(char));
for (i = 0 ; i < lr;i++)
r[i]='0';
r[lr-1]=' ';
ti = 0;
tb = 0;
for (i = la -1; i>=0 ; i--)
for (j = lb-1;j >=0 ; j--)
{
tr = (a[i]-48)*(b[j]-48) + ti + (r[lr-2-(la-1-i)-(lb-1-j)]-48);
ti = tr / 10;
tb = tr % 10;
r[lr-2-(la-1-i)-(lb-1-j)] = tb+48;
}
if (ti!=0)
r[0]=ti+48;
while (r[0]=='0')
r++;
return r;
}