这也是我看的另一道比较有意思的题目,主要求字符串相乘的结果,当然他们的乘积也为字符串形式
就是大数相乘,之前写过一个,找找给你
之前写的有加法和乘法,加法不需要的话删掉加法部分即可。
https://ask.csdn.net/questions/7716067
根据你的要求,可以使用下面的代码来实现:
class Solution {
public:
string multiply(string num1, string num2) {
//如果num1或num2是0,则直接返回“0”
if(num1 == "0" || num2 == "0")
return "0";
//定义一个字符串,用来保存最后乘积的结果
string result = "";
int n1 = num1.size();
int n2 = num2.size();
//创建一个n1+n2长度的数组
int *tmp = new int[n1+n2];
memset(tmp,0,sizeof(int)*(n1+n2));
for(int i=n1-1;i>=0;--i)
{
for(int j=n2-1;j>=0;--j)
{
int index = (n1 + n2 - 2) - (i + j);
int mulRes = (num1[i] - '0') * (num2[j] - '0');
tmp[index] += mulRes;
}
}
//将数组转换成字符串形式,并进行进位操作
int carry = 0;
for(int i=0;i<n1+n2;++i)
{
int currNum = carry + tmp[i];
carry = currNum / 10;
result.insert(result.begin(),(currNum%10 + '0'));
}
delete[] tmp;
//去除字符串开头多余的零
while(result[0] == '0' && result.length() > 1)
result.erase(result.begin());
return result;
}
};
望采纳。上面的代码是一个多项式乘法的实现,它将字符串num1和num2表示的整数转换为由数字0到9组成的数组,并将其乘积存储在新数组tmp中。之后,通过进位来将tmp转换为字符串形式,最后去除字符串开头多余的零,然后返回最终结果。
比如num1="12",num2="34",首先将字符串转换为由数字0到9组成的整形数组,也就是num1=[1,2],num2=[3,4]。然后按照多项式多次乘法的思想,逐一相乘,tmp=[3,8,4],之后按照进位的方法将数组变为字符串形式,最终结果是408,去除字符串开头多余的零,最终结果就是408。
字符串开头哪有多余的零?
当字符串num1和num2表示的整数乘积小于9时,结果中会产生多余的零,比如num1="1",num2="2",最终乘积是2,但它在转换成字符串形式的时候会变成"02",这样就会出现字符串开头的多余零。
大数乘法,供参考:https://blog.csdn.net/qq_62612545/article/details/121730833
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!