給定兩個以字串形式表示的非負整數num1
和num2
,返回num1
和num2
的乘積,它們的乘積也表示為字串形式。
示例 1:
輸入:num1 = "2", num2 = "3"輸出:"6"示例 2:
輸入:num1 = "123", num2 = "456"輸出:"56088"說明:
num1
和num2
的長度小於110。
num1
和num2
只包含數字0-9
。
num1
和num2
均不以零開頭,除非是數字 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...