题目意思就是将两个数字构成的字符串相乘,然后输出,这个题说白了就是一个模拟题,来模拟人们在竖乘的过程中的方法。
下面是我的代码:
class Solution {
public:
string multiply(string num1, string num2) {
vector<int> product(num1.size()+num2.size(),0);
for(int i=num1.size()-1;i>=0;i--)//来模仿人们乘法的过程,最后一位和最后一位相乘
for(int j=num2.size()-1;j>=0;j--)
{
product[i+j+1]+=(num1[i]-'0')*(num2[j]-'0');//x先不进位,每一位数字先保留后续进位,题目中+1的目的就是将整个字符串处在最后一位。
}
for(int i=num1.size()+num2.size()-1,t=0;i>=0;i--)//进位的过程,t是进位的数字
{
product[i]+=t;
t=product[i]/10;//求进位
product[i]%=10;//求属于该位的数字
}
int k=0;
while(k+1<product.size() && product[k] == 0) k++;//之所以k+1因为要确保如果全是0的话,起码输出一个0;
string res;
while(k<product.size())
res+=to_string(product[k++]);//to_string函数直接将数字添加进字符串,k++先添加后+1
return res;//返回
}
};