[LeetCode] Complex Number Multiplication
Given two strings representing two complex numbers.
You need to return a string representing their multiplication. Note i2 = -1 according to the definition.
Example 1:
Input: "1+1i", "1+1i" Output: "0+2i" Explanation: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i, and you need convert it to the form of 0+2i.
Example 2:
Input: "1+-1i", "1+-1i" Output: "0+-2i" Explanation: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i, and you need convert it to the form of 0+-2i.
Note:
- The input strings will not have extra blank.
- The input strings will be given in the form of a+bi, where the integer a and b will both belong to the range of [-100, 100]. And the output should be also in this form.
利用stringstream格式化字符串后计算。
class Solution { public: string complexNumberMultiply(string a, string b) { int ra, ia, rb, ib; char sign; stringstream sa(a), sb(b), res; sa >> ra >> sign >> ia >> sign; sb >> rb >> sign >> ib >> sign; res << ra * rb - ia * ib << "+" << ra * ib + rb * ia << "i"; return res.str(); } }; // 3 ms
利用sscanf格式化字符串后计算。
class Solution { public: string complexNumberMultiply(string a, string b) { int ra, ia, rb, ib; sscanf(a.c_str(), "%d+%di", &ra, &ia); sscanf(b.c_str(), "%d+%di", &rb, &ib); return to_string(ra * rb - ia * ib) + "+" + to_string(ra * ib + rb * ia) + "i"; } }; // 3 ms
使用stoi来转换
使用substr和find分割字符串
class Solution { public: string complexNumberMultiply(string a, string b) { auto pos = a.find('+'); int ra = stoi(a.substr(0, pos)); int ia = stoi(a.substr(pos + 1, a.find('i'))); pos = b.find('+'); int rb = stoi(b.substr(0, pos)); int ib = stoi(b.substr(pos + 1, b.find('i'))); return to_string(ra * rb - ia * ib) + "+" + to_string(ra * ib + rb * ia) + "i"; } }; // 3 ms