这个作者讲的很好,我只是理解,但是其中的detail太繁琐,就放视频给大家,大数相乘
LeetCode43.字符串相乘-2_哔哩哔哩_bilibili
class Solution {
public:
vector<int> mul(vector<int>&A,vector<int>&B)
{
vector<int> C(A.size()+B.size(),0);//99*99=9801 不超过它们的长度
int sum=0;//处理进制
for(int i =0;i<A.size();i++)
{
for(int j= 0;j<B.size();j++)
{
C[i+j] +=A[i]*B[j];
}
}
for( int i=0;i<C.size();i++)
{
sum+=C[i];
C[i] =sum%10;
sum/=10;
}
while(C.size()>1&&C.back()==0)//因为是反着的,如现在123,实际是321才对,这里防止当数组没装满最后那个数为0,如果不去除,当你在后面调转数组的时候如1230就会打印0321题目要求没有零
{
C.pop_back();
}
return C;
}
//主函数
string multiply(string num1, string num2)
{
vector<int>A;//定义两个数组,用于存放string转换后的数字
vector<int>B;
for(int i=num1.size()-1;i>=0;i--)//注意这里因为最后一个是个位所以要提前并且处理进制问题
{
A.push_back(num1[i]-'0');
}
for(int i=num2.size()-1;i>=0;i--)、、同理
{
B.push_back(num2[i]-'0');
}
vector<int> c=mul(A,B);
string s3 ="";
for(int i =c.size()-1;i>=0;i--)
{
s3+=to_string(c[i]);
}
return s3;
}
};