class Solution {
public:
string to_add(string &num_1, string &num_2)
{
int i = num_1.length() - 1 , j = num_2.length() - 1 , add = 0;
string res = "";
while(i >=0 || j >= 0 || add != 0)
{
int x = 0, y = 0;
if(i >= 0)
{
x = num_1[i] - '0';
}else
{
x = 0;
}
if(j >= 0)
{
y = num_2[j] - '0';
}else
{
y = 0;
}
int result = x + y + add;
res.push_back('0' + result % 10);
add = result / 10;
i-- , j-- ;
}
reverse(res.begin() , res.end());
return res;
}
string multiply(string num1, string num2) {
if(num1 == "0" || num2 == "0") //乘数与被乘数任意一个数字为0,则结果为0
{
return "0"; //注意 这个地方不要写成数字0, 应该是字符串 “0”
}
int n1 = num1.length() , n2 = num2.length(); //n1表示乘数的长度,n2表示被乘数的长度
string ans = ""; //记录最终结果
for(int j = n2 - 1 ; j >= 0 ; j--) //num[n - 1] 为最后一位数字
{
string curr = ""; //记录当前被乘数的第j位与乘数相乘的结果
int add = 0; //记录当前的进位数
for(int i = n2-1 ; i > j ; i--) //除了被乘数的最后一位被乘数,其余位的都需要补0
{
curr.push_back('0');
}
int y = num2.at(j) - '0'; //找到被乘数的第j位数
for(int i = n1 - 1 ; i >=0 ; i--) // 被乘数的第j位数依次与乘数的各个数相乘
{
int x = num1.at(i) - '0'; //找到乘数的第i位数字
int result = x * y + add;
curr.push_back('0' + result % 10); //将乘后的个数进行记录
add = result / 10; //处理进位
}
while(add != 0) //当前乘法结束后,处理剩余的进位数
{
curr.push_back('0' + add % 10);
add = add / 10;
}
reverse(curr.begin() , curr.end());
ans = to_add(ans , curr); //传进两个字符穿
}
return ans;
}
};