大数的乘法

这是个傻逼的题目是吧?但是这个事情一直很有需求,特别是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;
}
此条目发表在软件使用与程序设计分类目录。将固定链接加入收藏夹。