給定兩個以字串形式表示的非負整數num1
和num2
,返回num1
和num2
的乘積,它們的乘積也表示為字串形式。
示例 1:
輸入: num1 = "2", num2 = "3"示例 2:輸出: "6"
輸入: num1 = "123", num2 = "456"輸出: "56088"
思想:定義陣列,用來表示相乘的結果,判斷兩個字串的長度,將字串較長的作為第乙個乘數,定義兩個進製c和d,分別表示乘法進製和加法進製,然後從後向前遍歷字串,較小字串作為外層迴圈,
內層迴圈用較長字元。將遍歷兩字元相乘的結果存入陣列的對應位置。
**如下:
public輸出結果如下:class
multiply
public
static
string multiply(string s1, string s2)
else
//此時陣列arr的index位置的值加上res取模後的數和進製d
arr[index] += res % 10 +d;
//如果index位置值大於9,先讓d = 當前index位置的值除以10,然後對該值取模重新賦給index位置,否則d = 0;
if (arr[index] > 9
) else
//index自增
index++;
}//內層迴圈進行完畢,arr[index-1]在相加時可能存在進製,那麼index位置上的值可表示為兩進製之和
int tmp = c +d;
//如果此時tmp>0,index位置的值為tmp%10,index+1位置的值為1,否則,index位置的值為tmp
if(tmp>9
)else
//下次進入迴圈的index應該從index - (s1.length() - 1)位置開始
//假設我們出入s1 = "1234"和s2 = "456",我們第一次進入內層迴圈時,index從0開始,第二次進入內層迴圈時
//,index從1開始,第三次進入迴圈時,index從2開始,我們就會發現規律index從第二次開始的都是從下標
//index - s1.length() + 1開始的
index -= (s1.length() - 1
);
//退出內層迴圈將兩個進製都置為0
c=0; d = 0
; }
}else
else
arr[index] += res % 10 +d;
if (arr[index] > 9
) else
index++;
}int tmp = c +d;
if(tmp>9
)else
index -= (s2.length() - 1
); c=0
; d = 0
; }
}// stringbuffer sb = new
stringbuffer();
for(int i = arr.length-1;i>=0;i--)
else
}//返回字串
return
sb.tostring();}}
字串相乘
定給兩個以字串形式表示的非負整數 num1狀語從句 num2,報道檢視 num1狀語從句 num2的乘積,它們的乘積也表示為字串形式。示例1 輸入 num1 2 num2 3 輸出 6 示例2 輸入 num1 123 num2 456 輸出 56088 說明 num1狀語從句 num2的長度小於11...
字串相乘
給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。思路 經過學習,大致思路有兩種 第一種思路為進行每一位相乘運算時,同時處理進製,以每一位保持小於等於 9 大於等於 0 的數儲存到char陣列中。第二種思路為先進行每一位的相乘運算,儲存到c...
字串相乘
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...