中材矿山建设有限公司网站,免费企业网站源代码,网站建设与运营及营销服务,360云主机可以建设网站吗文章目录1. 题目2. 小学竖式乘法2.1 普通版2.2 优化版1. 题目
给定两个以字符串形式表示的非负整数 num1 和 num2#xff0c;返回 num1 和 num2 的乘积#xff0c;它们的乘积也表示为字符串形式。
示例 1:
输入: num1 2, num2 3
输出: 6返回 num1 和 num2 的乘积它们的乘积也表示为字符串形式。
示例 1:
输入: num1 2, num2 3
输出: 6示例 2:
输入: num1 123, num2 456
输出: 56088说明
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头除非是数字 0 本身。
不能使用任何标准库的大数类型比如 BigInteger或转换为整数来处理。来源力扣LeetCode 链接https://leetcode-cn.com/problems/multiply-strings 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。
类似题目LeetCode 415. 字符串相加大数加法
2. 小学竖式乘法
2.1 普通版 class Solution {
public:string multiply(string num1, string num2) {if(num1 0 || num2 0)return 0;int n1 num1.size(), n2 num2.size(), i, j;int bit1, bit2, carry, zero, curBit;string ans, temp;for(i n2-1; i 0; i--){carry 0;//进位清零temp ;//临时乘积zero n2-1-i;//后置添0个数while(zero--)temp.push_back(0);bit2 num2[i]-0;for(j n1-1; j 0 || carry ! 0; --j){bit1 j 0 ? 0 : (num1[j]-0);curBit (bit1*bit2carry)%10;temp.push_back(curBit0);carry (bit1*bit2carry)/10;}reverse(temp.begin(),temp.end());//上面临时乘积是逆序的ans addStrings(ans,temp);//调用大数加法}return ans;}//LeetCode 415. 字符串相加大数加法string addStrings(string num1, string num2) {int n1 num1.length(), n2 num2.length();int i n1-1, j n2-1, one 0, bit1, bit2, curBit;string ans;for( ; i 0 || j 0; --i,--j){bit1 i0 ? 0 : (num1[i]-0);bit2 j0 ? 0 : (num2[j]-0);curBit (bit1bit2one)%10;one (bit1bit2one)/10;ans.push_back(curBit0);}if(one)ans.push_back(1);reverse(ans.begin(),ans.end());return ans;}
};2.2 优化版 class Solution {
public:string multiply(string num1, string num2) {if(num1 0 || num2 0)return 0;int n1 num1.size(), n2 num2.size(), i, j, curSum;int bit1, bit2, len n1n2;int res[len] {0};//两数的乘积最多是n1n2位string ans, temp;for(i n2-1; i 0; i--){bit2 num2[i]-0;for(j n1-1; j 0; --j){bit1 num1[j]-0;curSum res[ij1] bit1*bit2;res[ij1] curSum % 10;res[ij] curSum / 10;}}for(i 0; i len; i){if(i 0 res[i] 0)continue;//前面可能有一个0跳过ans.append(to_string(res[i]));}return ans;}
};