难度中等80收藏分享切换为英文接收动态反馈
复数 可以用字符串表示,遵循 "实部+虚部i"
的形式,并满足下述条件:
实部
是一个整数,取值范围是[-100, 100]
虚部
也是一个整数,取值范围是[-100, 100]
i2 == -1
给你两个字符串表示的复数 num1
和 num2
,请你遵循复数表示形式,返回表示它们乘积的字符串。
示例 1:
输入:num1 = "1+1i", num2 = "1+1i" 输出:"0+2i" 解释:(1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。
示例 2:
输入:num1 = "1+-1i", num2 = "1+-1i" 输出:"0+-2i" 解释:(1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式。
提示:
num1
和num2
都是有效的复数表示。
题目思路:思考过程,拆分模拟即可
因为复数的形式为 1 + i 因此,我们需要先将其中的1 和i前面的系数拆分出来,然后按照复数的运算规则进行运算,
之后再也加上i 以字符串的形式输出结果即可,其中需要注意的是,拆分出来之后需要变换成整形才可以进行运算。
python代码:
class Solution:
def complexNumberMultiply(self, num1: str, num2: str) -> str:
a1 , b1 = num1[:-1].split("+") #将nums1和nums2都从0到倒数第二个开始以 '+' 分割开来
a2 , b2 = num2[:-1].split("+") #a1 , a2 都为复数的实部,b1 b2 都为复数的虚部除i之后的实数
a1 , b1 , a2 , b2 = int(a1) , int(b1) , int(a2) , int(b2) #将他们全部变为整形的数才可进行运算
return "{}+{}i".format(a1*a2-b1*b2 , a1*b2+a2*b1) #以字符串的形式输出结果
C++代码:stringstrem很好用 简单容易理解 -5行代码解决问题
class Solution {
public:
string complexNumberMultiply(string nums1, string nums2) {
int a1 , a2 , b1 , b2; //定义变量用来存储
char t; //用来存储加好
stringstream dre1(nums1) , dre2(nums2);//将stringstream可以将nums变成流方便拆分出
//复数的实部和虚部的i的系数 方便按照复数运算进行运算
dre1>>a1>>t>>b1 , dre2>>a2>>t>>b2; //拆分的结果 a1为nums1的实部 b1为虚部的系数,同理a2 b2
return to_string(a1*a2-b1*b2)+"+"+to_string(a1*b2+a2*b1)+"i"; //输出结果 to_string将数字变成字符串
}
};