LeetCode43——Multiply Strings

本文详细介绍了如何使用类比人类草稿计算乘法的步骤来解决大数相乘的问题,避免了直接将字符串转换为整型导致的溢出风险。通过将字符串转换为整数数组进行逐位计算,并处理进位,最终逆序构造得到结果字符串。此方法适用于处理非常大的数值,确保计算过程的准确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode43——Multiply Strings

题意:

做乘法,两个乘数都是string类型的。

直接string转整型是不行的,因为大数相乘可能溢出。

之前做过类似的大数乘法。其思路就是模拟人自己在草稿上计算乘法的步骤,按位把每一个求出来,注意进位和取模就OK

代码:

class Solution {
public:
	string multiply(string num1, string num2) {
		if (num1 == "0" || num2 == "0")
		{
			return "0";
		}
		vector<int> n1(num1.size());
		vector<int> n2(num2.size());
		int i;
		int j;
		for (j=0,i = num1.size() - 1; i >= 0; i--,j++)
		{
			n1[j] = num1[i] - '0';
		}
		for (j = 0, i = num2.size() - 1; i >= 0; i--, j++)
		{
			n2[j] = num2[i] - '0';
		}
		//string 转 vector<int>方便计算
		vector<char>tmpRes(num1.size()+num2.size(),'0');
		for (i = 0; i < n1.size(); i++)
		{
			for (j = 0; j < n2.size(); j++)
			{
				int tmp = n1[i] * n2[j];
				int tmp2 = (tmpRes[i + j] - '0' + tmp % 10);//当前位加上乘积的模
				tmpRes[i + j] = tmp2%10 + '0';
				tmpRes[i + j + 1] =tmpRes[i+j+1]+tmp2/10+ tmp / 10;//进位
			}
		}
		string result(tmpRes.rbegin(), tmpRes.rend());//逆序构造
		 i = -1;
		 while (result[++i] == '0');
		 result.erase(result.begin(), result.begin() + i);//删除前缀0
		 //debugging
	/*	while (1)
		{
			int a;
		}*/
		return result;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值