字串相乘

2022-05-07 11:15:11 字數 1876 閱讀 1516

給定兩個以字串形式表示的非負整數num1num2,返回num1num2的乘積,它們的乘積也表示為字串形式。

示例 1:

輸入: num1 = "2", num2 = "3"

輸出: "6"

示例 2:

輸入: 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...