1 题目
Given two strings representing two complex numbers.
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 + i2 + 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 + i2 - 2 * i = -2i, and you need convert it to the form of 0+-2i.
Note:
- The input strings will not have extra blank.
- 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.
2 分析
这道题其实就是复数的乘法,(a+bi)(c+di) = (ac-bd) + (ad+bc)i
我觉得难点在于字符串的操作上
分割字符串
将字符串转换成整数:atoi( const char * str )
将数字转换成字符串(返回结果):to_string( num )
3 C++实现
class Solution {
public:
string complexNumberMultiply(string a, string b) {
string real_1, real_2;
string img_1, img_2;
int pos_1 = 0;
for(; a[pos_1] != '+'; pos_1++) {
real_1.append(1, a[pos_1]);
}
for(pos_1 += 1; a[pos_1] != 'i'; pos_1++) {
img_1.append(1, a[pos_1]);
}
int pos_2 = 0;
for(; b[pos_2] != '+'; pos_2++) {
real_2.append(1, b[pos_2]);
}
for(pos_2 += 1; b[pos_2] != 'i'; pos_2++) {
img_2.append(1, b[pos_2]);
}
int r1 = atoi(real_1.c_str());
int r2 = atoi(real_2.c_str());
int i1 = atoi(img_1.c_str());
int i2 = atoi(img_2.c_str());
int ans_real = r1*r2-i1*i2;
int ans_img = r1*i2+i1*r2;
string ans = to_string(ans_real) + "+" + to_string(ans_img) + "i";
return ans;
}
};