基本思想:和正常的乘法思路一样,按照步骤做即可。
//这是一个大数的乘法
//1.看看是不是负号,如果是负号把他从字符串中减去
//2.进行位和位的相乘
//3.该进位的进位
//4.将数字反转,如果前一位是零的,将其剔除掉,并加上负号
class Solution {
public:
string multiply(string num1, string num2)
int flag=1;
if(num1[0]=='-' || num2[0]=='-')
{
if(num1[0]=='-')
{
flag*=-1;
num1=num1.substr(1,num1.size()-1);
}
if(num2[0]=='-')
{
flag*=-1;
num2=num2.substr(1,num1.size()-1);
}
}
int len1=num1.size();
int len2=num2.size();
int length=len1+len2+1;
int s[length];
memset(s,0,sizeof(int)*length);
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
s[(len1-i-1)+(len2-j-1)]+=(num1[i]-'0')*(num2[j]-'0');
}
}
for(int i=0;i<length;i++)
{
s[i+1]+=s[i]/10;
s[i]=s[i]%10;
}
for(int i=0;i<length/2;i++)
{
int temp=s[length-i-1];
s[length-i-1]=s[i];
s[i]=temp;
}
string ans=flag<0?"-":"";
for(int i=0, flagg=-1;i<length;i++)
{
if(s[i]!=0)
{
flagg=1;
}
if(flagg>0)
{
ans+=s[i]+'0';
}
}
return ans=="" ? "0":ans;
}
};