解題思路
模擬豎式乘法,解決大數相乘問題
考點
大數相乘
代碼
class Solution {
public:
string addStrings(string num1, string num2) {
//if (num1.length()==1&& stoi(to_string(num1[0]))==0|| num2.length() == 1 && stoi(to_string(num2[0])) == 0)
//{
// return "0";//如果num1某個字符
//}
int i = num1.length() - 1, j = num2.length() - 1;//i,j指針分佈指向num1,num2尾部,模擬人工加法
int carry = 0;//記入進位值
string res = "";//記錄結果
while (i >= 0 || j >= 0)
{
int tmp = 0;//計算每一位相加的值
int n1 = i < 0 ? 0 : num1[i]-'0';
int n2 = j < 0 ? 0 : num2[j] - '0';
tmp = n1 + n2 + carry;//計算每一對應位相加的和
carry = tmp / 10;//保留進位數
tmp %= 10;//保留餘數
res.append(to_string(tmp));
i--, j--;//前移一位
}
if (carry == 1)//如果num1,num2的最高一位相加後進位了,最後還要加上進位
{
res.append(to_string(carry));
}
string s(res.rbegin(), res.rend());//結果逆序輸出
return s;
}
};