題目連結:
題目意譯:
一個複數可以表為一字串格式為 "real+imaginaryi" ,其中:
real 為實部且為一整數介於範圍 [-100,100] 中。
imaginary 為虛部且為一整數介於範圍 [-100,100] 中。
i ^ 2 == -1。
給定以字串表示的兩個複數 num1 和 num2 ,回傳一字串形式之複數其為兩者之乘積。
限制:
num1 和 num2 皆為合法的複數。
範例測資:
範例 1:
輸入: num1 = "1+1i", num2 = "1+1i"
輸出: "0+2i"
解釋: (1 + i) × (1 + i) = 1 + i2 + 2 * i = 2i,而你需要將其轉為格式 "0+2i" 。
範例 2:
輸入: num1 = "1+-1i", num2 = "1+-1i"
輸出: "0+-2i"
解釋: (1 - i) × (1 - i) = 1 + i2 - 2 * i = -2i,而你需要將其轉為格式 "0+-2i" 。
解題思維:
先將給定的 num1 、 num2 之字串拆成兩個複數各自的實部和虛部。假設 num1 為 a + bi 、 num2 為 c + di,則兩者的乘積即為
(ac - bd) + (ad + bc)i
然後將上式的結果之實部、虛部轉成題目的格式即是所求。
不過 C++ 自己就有 <complex> 標頭檔,複數的加減乘法其實不用自己寫。當然,題目的格式還是得自己轉的。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。