leetcode 43 Multiply Strings (字符串相乘)

    Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
    The numbers can be arbitrarily large and are non-negative.
    Converting the input string to integer is NOT allowed.
    You should NOT use internal library such as BigInteger.
题目的大体意思是:用字符串表示的整数做乘法操作,返回结果也是字符串。
    解析:假设我们有字符串num1和num2,那么我们如何获得num1*num2所表示的字符串呢?比如说num1="25"和num2="8",返回的结果为res="200"。我们注意到字符串num1第i位和字符串num2第j位相乘,最后的结果一定在res的第i+j+1位和第i+j位之中。也就是说num1[i] * num2[j] = res[i+j][i+j+1]。用下图可以清晰的表示:

    我们使用vector<int> data数组存储num1[i]*num2[j]的结果,data数组的大小为num1字符串大小与num2字符串大小之和,那么num[i]*num2[j]的结果一定存储在data[i+j]和data[i+j+1]之中。最后我们把计算得出的data数组转换为字符串即可。代码如下:
string multiply(string num1, string num2)
{
	int len1 = num1.size();
	int len2 = num2.size();
	vector<int> data(len1 + len2);
	for (int i = len1 - 1; i >= 0; --i)
	{
		for (int j = len2 - 1; j >= 0; --j)
		{
			int val = (num1[i] - '0') * (num2[j] - '0');
			val += data[i + j + 1];
			data[i + j + 1] = val % 10;
			data[i + j] += val / 10;
		}
	}
	string res = "";
	int index = 0;
	while (index < data.size())
	{
		if (data[index] != 0)
			break;
		index++;
	}
	while (index < data.size())
	{
		res += (data[index++] + '0');
	}
	if (res.empty())
		res = "0";
	return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值