43. Multiply Strings

/*本意是想将字符串挨个字符转换成数字做乘法,然后在同一将数字转换成字符串,但是类型出现混乱貌似会溢出longlong 类型也不行,貌似此方法行不通,因此只能借助一个数组来存储得到结果的每一位数字,但是在其中需要注意的是相乘后发生的进位情况,由于在申请空间时,有可能会出现空间过大,导致后面会出现补贴的0值,这要在后面处理掉*/
class Solution {
public:
    string multiply(string num1, string num2) {
       if (num1.empty() || num2.empty())
		return "";
	int len1 = num1.size();
	int len2 = num2.size();
	int flag1 = 0,flag2=0;
	while (num1[flag1++]=='0')
	if (flag1 == len1)
		return "0";
	while (num2[flag2++] == '0')
	if (flag2 == len2)
		return "0";
	string result;
	reverse(num1.begin(), num1.end());//先反转字符串
	reverse(num2.begin(), num2.end());
	vector<int> Result(len1+len2);//存放每一个位数的结果
	int count1 = 0, count2 = 0;
    int sum=0;//sum代表的是最后结果;
	int  residue = 0;//residue代表的是一次最终的数字;
	for (int i = 0; i < len1; i++)
	{
	    int add=0;//add代表的是进位
		count1 = num1[i] - 48;
		for (int j = 0; j < len2; j++)
		{
			count2 = num2[j] - 48;
			sum = count1*count2 + add + Result[i + j];
			residue = sum % 10;//除10取余得到结果数字
			add = sum / 10;//进位	
			Result[i + j] = residue;
		}
		if (add>0)
			Result[i + len2] = Result[i + len2]+ add;//这是一次循环结束后出现进位
	}
     
	for (int i = Result.size()-1; i >= 0; i--)//将数字转换成字符串,注意在非0元素后面的0要在后面步骤中删除
		result.push_back(Result[i]+48);
	int k=0;
	while(result[k++]=='0');//找到第一个非‘0’的位置;
	result.erase(result.begin(),result.begin()+k-1);//删除转换后字符串前面的‘0’
	return result;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值