1、思路
??兩數(shù)相乘時焦除,乘數(shù)某位與被乘數(shù)某位相乘红伦,所產(chǎn)生結(jié)果的位置是有規(guī)律的英古。具體規(guī)律如下:
??乘數(shù) num1 位數(shù)為 MM,被乘數(shù) num2 位數(shù)為 NN色建, num1 x num2 結(jié)果 res 最大總位數(shù)為 M+N哺呜。num1[i] x num2[j] 的結(jié)果為 tmp(位數(shù)為位,"0x","xy"的形式)箕戳,其第一位位于 res[i+j]某残,第二位位于 res[i+j+1]。
2陵吸、代碼實現(xiàn)(C++)
class Solution {
public:
// 字符串相乘
string multiply(string num1, string num2) {
if (num1 == "0" || num2 == "0") {
return "0";
}
int len1 = num1.length();
int len2 = num2.length();
string res(len1+len2, '0'); // 結(jié)果位數(shù)一定小于等于len1+len2位
for (int i = len2-1; i >= 0; i--) {
for (int j = len1-1; j >= 0; j--) {
int temp = (num1[j]-'0') * (num2[i]-'0') + (res[i+j+1]-'0'); // res[i+j+1]是上次進位
res[i+j+1] = temp%10 + '0'; //當前位
res[i+j] += temp/10; // 產(chǎn)生的進位玻墅,res[i+j]已經(jīng)初始化為'0',加上int類型自動轉(zhuǎn)化為char壮虫,所以此處不加'0'
}
}
// 去除首位'0'
for(int i = 0; i < len1+len2; i++){
if(res[i]!='0')
return res.substr(i);
}
return "0";
}
};