字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

res = 0
num1的最左边:num1[-len(num1)]
num1的最右边:num1[-1]
    for i in range(1,len(num1)+1):
        for j in range(1, len(num2)+1):
        10^n是为了乘法结果左移;
        -i,-j是为了倒过来计算;
        每一步相加
            res += int(num1[-i]) * int(num2[-j]) *10**(i+j-2)
    return str(res)
def multiply(self, num1: str, num2: str) -> str:
	multiply的计算:
					num1: 12 ; num2: 456
					 912
					912 456
					5472
字符串相加:得到字符串;
        def addStr(first,second,k):
            if not first:return second;
            first,second=first[-1::-1],second[-1::-1];
            ans=first[:k];
            n=len(second);
            p=0;
            for i in range(n):
                if i+k<len(first):
                    ff=int(first[i+k]);
                else:ff=0;
                f=ff+int(second[i])+p;
                ans+=str(f%10);
                p=f//10;
            if p:
                ans+=str(p);
            return ans[-1::-1];

        if num1=='0' or num2=='0':return '0';
        if num1=='1' or num2=='1' :return num1 if num1!='1' else num2;
        n1,n2=len(num1),len(num2);
        str1,str2=num1,num2;
        if n1!=n2:
            str1=num1 if n1<n2 else num2;
            str2=num1 if n1>n2 else num2;
        first,second='','';
        isBegin=True;
        n=0;
        # print(str1,str2)
        str1,str2=str1[-1::-1],str2[-1::-1];

        for i in str1:
            ans='';
            ki=int(i);
            p=0;
            if isBegin:
                first=''
            for j in str2:
                kj=int(j);
                res=p+ki*kj
                ans+=str(res%10);
                p=res//10;
            if p:
                ans+=str(p)
            second=ans[-1::-1];
            # print(first,second)
            first=addStr(first,second,n);
            n+=1;
            isBegin=False;
        return first;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值