博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Complex Number Multiplication 复数相乘
阅读量:6888 次
发布时间:2019-06-27

本文共 2201 字,大约阅读时间需要 7 分钟。

 

Given two strings representing two .

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 + i

2

+ 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 + i

2

- 2 * i = -2i, and you need convert it to the form of 0+-2i.

Note:

  1. The input strings will not have extra blank.
  2. 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.

 

这道题让我们求复数的乘法,有关复数的知识最早还是在本科的复变函数中接触到的,难起来还真是难。但是这里只是最简单的乘法,只要利用好定义i2=-1就可以解题,而且这道题的另一个考察点其实是对字符的处理,我们需要把字符串中的实部和虚部分离开并进行运算,那么我们可以用STL中自带的find_last_of函数来找到加号的位置,然后分别拆出实部虚部,进行运算后再变回字符串,参见代码如下:

 

解法一:

class Solution {public:    string complexNumberMultiply(string a, string b) {        int n1 = a.size(), n2 = b.size();        auto p1 = a.find_last_of("+"), p2 = b.find_last_of("+");        int a1 = stoi(a.substr(0, p1)), b1 = stoi(b.substr(0, p2));        int a2 = stoi(a.substr(p1 + 1, n1 - p1 - 2));        int b2 = stoi(b.substr(p2 + 1, n2 - p2 - 2));        int r1 = a1 * b1 - a2 * b2, r2 = a1 * b2 + a2 * b1;        return to_string(r1) + "+" + to_string(r2) + "i";    }};

 

下面这种方法利用到了字符串流类istringstream来读入字符串,直接将实部虚部读入int变量中,注意中间也要把加号读入char变量中,然后再进行运算即可,参见代码如下:

 

解法二:

class Solution {public:    string complexNumberMultiply(string a, string b) {        istringstream is1(a), is2(b);        int a1, a2, b1, b2, r1, r2;        char plus;        is1 >> a1 >> plus >> a2;        is2 >> b1 >> plus >> b2;        r1 = a1 * b1 - a2 * b2, r2 = a1 * b2 + a2 * b1;        return to_string(r1) + "+" + to_string(r2) + "i";    }};

 

下面这种解法实际上是C语言的解法,用到了sscanf这个读入字符串的函数,需要把string转为cost char*型,然后标明读入的方式和类型,再进行运算即可,参见代码如下:

 

解法三:

class Solution {public:    string complexNumberMultiply(string a, string b) {        int a1, a2, b1, b2, r1, r2;        sscanf(a.c_str(), "%d+%di", &a1, &a2);        sscanf(b.c_str(), "%d+%di", &b1, &b2);        r1 = a1 * b1 - a2 * b2, r2 = a1 * b2 + a2 * b1;        return to_string(r1) + "+" + to_string(r2) + "i";    }};

 

参考资料:

 

转载地址:http://nzxbl.baihongyu.com/

你可能感兴趣的文章
Vue使用element-ui所遇BUG与需求集结(二)
查看>>
弹性公网EIP,让网络更自由、灵活
查看>>
一对一直播源码都实现了哪几种常见的优化技术? ...
查看>>
Unity学习系列一简介
查看>>
利用Python框架pyxxnet_project实现的网络服务
查看>>
一个最简单的WebSocket hello world demo
查看>>
C# 8.0的三个令人兴奋的新特性
查看>>
关于ip_conntrack跟踪连接满导致网络丢包问题的分析
查看>>
烂泥:linux学习之VNC远程控制(一)
查看>>
如何解决Xshell使用时中文字体是躺倒显示的问题
查看>>
Scala函数的定义的几种写法
查看>>
【iphone应用开发】iphone 应用开发之二:UITextView控件的详细讲解
查看>>
HTML5 API摘要
查看>>
去除滚动条的可滚动效果
查看>>
注入攻击 初见解
查看>>
JProfiler_SN_8_x.txt
查看>>
IntelliJ IDEA 社区版没有 Spring Initializr
查看>>
(C++)从本机获取WMI数据.
查看>>
【Practical API Design学习笔记】修复奥德修斯
查看>>
CentOS镜像使用帮助
查看>>