leetcode43. 字符串相乘

这篇博客介绍了两种用C++实现字符串表示的非负整数乘法的方法。第一种是常规的竖式乘法,通过逐位相乘并添加额外的零来完成;第二种是优化的竖式乘法,利用数组存储中间结果,减少字符串操作,提高效率。这两种方法均避免使用标准库的大整数类型或直接转换为整数。

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

示例:
 输入:num1 = “123”,num2 = “456”
 输出:“56088”

说明:

  1. num1和num2的长度小于110。
  2. num1和num2只包含数字0~9。
  3. num1和num2均不以零开头,除非是数字0本身。
  4. 不能使用任何标准库的大整数类型(比如BigInteger)或直接将输入转换为整数来处理。

方法一:普通竖式法

该方法基于我们平常的乘法运算,我们一般在草稿纸上列竖式,用乘数的每一位分别乘以被乘数,然后将这些结果加起来得到最终结果,只不过要注意的是:用乘数的各个位与被乘数相乘所得到的这些数在相加时,需要错位相加。
在这里插入图片描述
实际上我们可以将这些错位看成是在数字的后面添上了数字0,这样一来就有规律可循了。在乘数的最后一位(个位)与被乘数相乘的结果后面添上零个0,在乘数的倒数第二位(十位)与被乘数相乘的结果后面添上一个0,在乘数的倒数第三位(百位)与被乘数相乘的结果后面添上两个0,最后将这些结果相加就得到了最终结果。
在这里插入图片描述
结论如下: 将乘数的每一位分别与被乘数相乘,并且在乘数的倒数第n位与被乘数相乘的结果后添上n-1个0,再将这些结果相加,即可得到最终结果。

代码如下:

class Solution {
   
   
public:
	//字符串相乘
	string multiply(string num1, string num2) {
   
   
		if (num1 == "0" || num2 == "0")
			return "0";
		string retArr; //相乘后的字符串
		int flag = 0; //标识需要添加的0的个数
		for (int i = num2.size() - 1; i >= 0; i--) //依次取乘数的倒数第一位、倒数第二位、...
		{
   
   
			int count = num2[i] - '0'; //乘数当中待与被乘数相乘的那一位的数字
			string tmp; //存储乘数该位与被乘数相乘后的结果(此时为空)
			//数count与被乘数相乘,相当于将被乘数加count次到tmp当中
			for (int j = 0; j < count; j++)
			{
   
   
				tmp = addStrings(tmp, num1);<
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021dragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值