首页 > 试题广场 >

大数乘法

[编程题]大数乘法
  • 热度指数:29084 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
以字符串的形式读入两个数字,编写一个函数计算它们的乘积,以字符串形式返回。

数据范围: 读入的数字大小满足 

要求:空间复杂度 O(m),时间复杂度 O(m^2)假设m是n的长度
示例1

输入

"11","99"

输出

"1089"

说明

11*99=1089 
示例2

输入

"1","0"

输出

"0"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param s string字符串 第一个整数
 * @param t string字符串 第二个整数
 * @return string字符串
 */
char* solve(char* s, char* t ) {
    int slen = strlen(s);
    int tlen = strlen(t);
    int rlen = slen + tlen;
    char *r = (char *)malloc(slen + tlen + 1);
    int i, j;
    char sbit, tbit, carry, rbit;

    memset(r, '0', rlen);
    r[rlen] = '\0';

    /* 执行乘法运算
     *  123   (t)
     *x 456   (s)
     *-------
     *  518   (r)
     */
    for (i = 0; i < slen; i++) {
        sbit = s[slen - i - 1];
        carry = 0;

        for (j = 0; j < tlen; j++) {
            tbit = t[tlen - j - 1];
            rbit = r[rlen - j - i - 1];

            carry = (rbit - '0') + carry
                                 + (sbit - '0') * (tbit - '0');
            r[rlen - j - i - 1] = (carry % 10) + '0';
            carry /= 10;
        }

        r[rlen - tlen - i - 1] += carry;
    }
    
    if (carry == 0) {
        return &r[1];
    }

    return r;
}

发表于 2021-11-07 07:23:07 回复(0)

问题信息

难度:
2条回答 8982浏览

热门推荐

通过挑战的用户

查看代码