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

上一篇下一篇

猜你喜欢

热点阅读