Leetcode537. 复数乘法
2019-11-15 本文已影响0人
LonnieQ
题目
给定两个表示复数的字符串。
返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。
示例 1:
输入: "1+1i", "1+1i"
输出: "0+2i"
解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
示例 2:
输入: "1+-1i", "1+-1i"
输出: "0+-2i"
解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。
注意:
输入字符串不包含额外的空格。
输入字符串将以 a+bi 的形式给出,其中整数 a 和 b 的范围均在 [-100, 100] 之间。输出也应当符合这种形式。
思路
新建一个复数类,使其支持和字符串相互转换和乘法运算。
C++解法
struct Complex {
int real = 0;
int imaginary = 0;
Complex(string str = "") {
int number = 0;
int sign = 1;
for (auto c: str) {
if (c == '+') {
real = sign * number;
number = 0;
sign = 1;
} else if (c >= '0' && c <= '9') {
number = number * 10 + c - '0';
} else if (c == '-') {
sign = -1;
}
}
imaginary = sign * number;
}
Complex multipliedBy(Complex value) {
Complex newValue;
newValue.real = real * value.real - imaginary * value.imaginary;
newValue.imaginary = real * value.imaginary + imaginary * value.real;
return newValue;
}
string description() {
string value;
value.append(to_string(real));
value.append("+");
value.append(to_string(imaginary));
value.append("i");
return value;
}
};
class Solution {
public:
string complexNumberMultiply(string a, string b) {
Complex lhs(a), rhs(b);
return lhs.multipliedBy(rhs).description();
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/complex-number-multiplication