騰訊精選練習題43 字串相乘

2021-09-19 08:53:13 字數 1558 閱讀 2235

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

示例 1:

輸入:num1 = "2", num2 = "3"輸出:"6"
示例 2:

輸入:num1 = "123", num2 = "456"輸出:"56088"
說明:

num1num2的長度小於110。

num1num2只包含數字0-9

num1num2均不以零開頭,除非是數字 0 本身。

不能使用任何標準庫的大數型別(比如 biginteger)直接將輸入轉換為整數來處理

思路一:

num1="123"  num2="456";

定義乙個變數sum儲存各個數字相乘的結果。

比如123*456=(1*10*10)*(4*10*10)+(2*10)*(4*10)+.....+3*6

每個數字相乘,比如1*4,後面需要乘以10的4次方。因為1代表1*100,4代表4*100

需要乘以10的多少次方應該從陣列最後一位的索引值減去當前數所在的索引值,比如,123,變成陣列後,索引為[0,1,2],1位於索引為0的位置,最後乙個索引為2,那麼1就應該乘以10的(2-0)=2次方,也就是2*10²。其它數字同理。

但是這種方式,當數字太大時,所得到的結果值可能需要開闢過大的空間,甚至會超出int、long甚至doule的資料範圍,所以這種方式不可取。

思路二:

/**

num1的第i位(高位從0開始)和num2的第j位相乘的結果在乘積中的位置是[i+j, i+j+1]

例: 123 * 45, 123的第1位 2 和45的第0位 4 乘積 08 存放在結果的第[1, 2]位中

index: 0 1 2 3 4

1 2 3

* 4 5

---------

1 51 0

0 5---------

0 6 1 5

1 20 8

0 4---------

0 5 5 3 5

這樣我們就可以單獨都對每一位進行相乘計算把結果存入相應的index中

**/

class solution 

}stringbuilder sb=new stringbuilder();

for(int i=0;ireturn sb.tostring();

}}

43 字串相乘

給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...

43 字串相乘

題目描述 給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於1...

43 字串相乘

小聲bb,直接int 多好 既然題目要求不能直接用int 我只好開動我的大腦開始想有什麼解決方案。然後首先想到的就是小學時候老師教乘法時用乘式寫法。1 2 3 4 5 6 1 5 4 9 2 5 5 3 51 2 3 4 5 1 51 0 0 5 0 6 1 5 1 20 8 0 4 0 5 5 3...