实现两个字符串的乘法

实现两个由数字构成的字符串的乘法,其实现代码如下所示:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
string multiply(string &num1, string &num2)
{
	if (num1 == "0" || num2 == "0")
	{
		return "0";
	}
	int len1 = num1.length();
	int len2 = num2.length();
	vector<int> result(len1 + len2 - 1, 0);
	string resultStr = "";
	for (int i = len1 - 1; i >= 0; --i)
	{
		for (int j = len2 - 1; j >= 0; --j)
		{
			result[i + j] += (num1[i] - '0')*(num2[j] - '0');//关键的一步,两个位数和相等的乘积放在同一个地方
		}
	}
	string temp1, temp2;
	int k = len1 + len2 - 2;
	while (k != 0)
	{
		temp1 = result[k] % 10 + '0';
		resultStr = temp1 + resultStr;
		result[k - 1] += result[k] / 10;
		--k;
	}
	temp1 = result[0] % 10 + '0';
	resultStr = temp1 + resultStr;
	if (result[0] >= 10)
	{
		temp2 = result[0] / 10 + '0';
		resultStr = temp2 + resultStr;
	}
	return resultStr;
}
int main()
{
	string s1 = "9";
	string s2 = "9";
	string s3 = "12564875421475";
	string s4 = "4578124754157841541";
	cout << "s1*s2 = " << multiply(s1, s2) << endl;
	cout << "s3*s4 = " << multiply(s3, s4) << endl;
	system("pause");
	return 0;
}

实验结果如下所示:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值