一、题目描述
给定两个表示复数的字符串。
返回它们乘积的字符串,注意根据定义 i2=−1 。
例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.
例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.
函数原型:
string complexNumberMultiply(string a, string b)
二、编程思路
本题思路相对简单。对于输入字符串
a
,首先根据加号的位置将复数的实部与虚部分离,将其转为实部与虚部的整型值
real1
、
img1
。同样将
b
转化为
real2
、
img2
。则结果的
real
与
img
为:
real=real1∗real2−img1∗img2;img=real1∗img2+real2∗img1;
本题中使用c++中string的库函数可以极大地简化代码:
- find_first_of:寻找字符串中第一此出现子字符串的位置。
- substr:截取字符串的一部分子串,注意第一个参数是开始坐标,第二个参数为截取子串的长度。
- stoi:将字符串转化为整型数。
- to_string:将数字类型转为字符串。
三、程序设计
class Solution {
public:
inline void str2comp(const string& str,int &real,int &img){
int add_idx=str.find_first_of("+");
// cout<<add_idx<<endl;
real=stoi(str.substr(0,add_idx));
img=stoi(str.substr(add_idx+1,str.size()-add_idx));
// cout<<real<<" "<<img<<endl;
return;
}
inline void comp2str(string &str,const int& real,const int &img){
str=to_string(real)+"+"+to_string(img)+"i";
return;
}
string complexNumberMultiply(string a, string b) {
int real1,img1,real2,img2,real,img;
string str;
str2comp(a,real1,img1);
str2comp(b,real2,img2);
real=real1*real2-img1*img2;
img=real1*img2+real2*img1;
comp2str(str,real,img);
// cout<<str;
// cout<<real<<" "<<img<<endl;
return str;
}
};