当前位置:首页 > 力扣题解 > 力扣537详解:字符串处理与复数乘法的完美结合

力扣537详解:字符串处理与复数乘法的完美结合

3周前 (06-26)力扣题解83

截图未命名.jpg 力扣537详解:字符串处理与复数乘法的完美结合 复数乘法 字符串解析  C++实现 数学运算 第1张

一、问题理解

复数乘法是数学中的基本运算,题目要求我们处理字符串形式的复数,并返回它们的乘积。

二、解题步骤详解

  1. 字符串解析‌:

    • 使用find方法定位'+'和'i'的位置

    • 使用substr提取实部和虚部字符串

    • 使用stoi将字符串转换为整数

  2. 复数乘法运算‌:

    • 实部 = (ac - bd)

    • 虚部 = (ad + bc)

  3. 结果构造‌:

    • 使用to_string将数值转换为字符串

    • 按照"实部+虚部i"的格式拼接结果

三、关键点分析

  1. 字符串处理技巧‌:

    • 定位关键字符的位置

    • 安全地提取子字符串

    • 字符串到整数的转换

  2. 复数运算规则‌:

    • 理解i²=-1的性质

    • 掌握复数乘法的展开公式

  3. 边界情况考虑‌:

    • 负数的处理

    • 输入格式的严格性

四、代码实现

class Solution {
public:
    string complexNumberMultiply(string num1, string num2) {
        // 解析第一个复数的实部和虚部
        auto [a, b] = parseComplex(num1);
        // 解析第二个复数的实部和虚部
        auto [c, d] = parseComplex(num2);
       
        // 计算实部和虚部
        int real = a * c - b * d;
        int imag = a * d + b * c;
       
        // 构造结果字符串
        return to_string(real) + "+" + to_string(imag) + "i";
    }
    // 辅助函数:解析复数字符串
    pair<int, int> parseComplex(const string& num) {
        // 找到'+'和'i'的位置
        size_t plus_pos = num.find('+');
        size_t i_pos = num.find('i');
       
        // 提取实部和虚部
        int real = stoi(num.substr(0, plus_pos));
        int imag = stoi(num.substr(plus_pos + 1, i_pos - plus_pos - 1));
       
        return {real, imag};
    }
};

五、优化建议

  1. 可以添加输入验证确保字符串格式正确

  2. 考虑使用stringstream替代find/substr组合

  3. 对于大量运算,可以预先解析所有复数


原创内容 转载请注明出处

分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。