一道关于字符串相乘的问题

这也是我看的另一道比较有意思的题目,主要求字符串相乘的结果,当然他们的乘积也为字符串形式

img

就是大数相乘,之前写过一个,找找给你
之前写的有加法和乘法,加法不需要的话删掉加法部分即可。
https://ask.csdn.net/questions/7716067


根据你的要求,可以使用下面的代码来实现:

class Solution {
public:
    string multiply(string num1, string num2) {
        //如果num1或num2是0,则直接返回“0” 
        if(num1 == "0" || num2 == "0") 
            return "0";
            
        //定义一个字符串,用来保存最后乘积的结果 
        string result = ""; 
        int n1 = num1.size();
        int n2 = num2.size();
        
        //创建一个n1+n2长度的数组 
        int *tmp = new int[n1+n2]; 
        memset(tmp,0,sizeof(int)*(n1+n2)); 
        for(int i=n1-1;i>=0;--i) 
        { 
            for(int j=n2-1;j>=0;--j) 
            { 
                int index = (n1 + n2 - 2) - (i + j); 
                int mulRes = (num1[i] - '0') * (num2[j] - '0'); 
                tmp[index] += mulRes; 
            } 
        } 
        
        //将数组转换成字符串形式,并进行进位操作 
        int carry = 0; 
        for(int i=0;i<n1+n2;++i) 
        { 
            int currNum = carry + tmp[i]; 
            carry = currNum / 10; 
            result.insert(result.begin(),(currNum%10 + '0')); 
        } 
        delete[] tmp; 
        //去除字符串开头多余的零 
        while(result[0] == '0' && result.length() > 1) 
            result.erase(result.begin()); 
        return result; 
    }
};

望采纳。上面的代码是一个多项式乘法的实现,它将字符串num1和num2表示的整数转换为由数字0到9组成的数组,并将其乘积存储在新数组tmp中。之后,通过进位来将tmp转换为字符串形式,最后去除字符串开头多余的零,然后返回最终结果。
比如num1="12",num2="34",首先将字符串转换为由数字0到9组成的整形数组,也就是num1=[1,2],num2=[3,4]。然后按照多项式多次乘法的思想,逐一相乘,tmp=[3,8,4],之后按照进位的方法将数组变为字符串形式,最终结果是408,去除字符串开头多余的零,最终结果就是408。
字符串开头哪有多余的零?
当字符串num1和num2表示的整数乘积小于9时,结果中会产生多余的零,比如num1="1",num2="2",最终乘积是2,但它在转换成字符串形式的时候会变成"02",这样就会出现字符串开头的多余零。

大数乘法,供参考:https://blog.csdn.net/qq_62612545/article/details/121730833

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632