1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 哔哩哔哩校招原题 - 复数乘法

哔哩哔哩校招原题 - 复数乘法

时间:2018-11-09 19:10:25

相关推荐

哔哩哔哩校招原题 - 复数乘法

目录

1.题目解读

2.解题思路

3.代码示例

1.题目解读

题目描述:

输入两个表示复数的字符串,输出它们相乘的结果的字符串。复数字符串用 a + bi 表示(a,b 为整数,i 为虚数单位,i^2 = -1)

输入描述:

两个表示复数的字符串

输出描述:

两个数相乘的结果的字符串

输入例子1:

1+2i2+1

输出例子1:

0+5i

例子说明1:

(1+2i)(2+i) = (2 + i + 4i + 2i * i) = 0 + 5i

输入例子2:

1+-2i3+4i

输出例子2:

11+-2i

例子说明2:

(1+-2i)(3+4i) = (3 + 4i - 6i - 8i * i) = 11+-2i

🍁题目解析

从题目描述和例子我们可以知道以下几点:

🍃1.两字符串必须是复数的形式,实部虚部可以都有,也可以只有虚部(实部为0)。

🍃2.两字符串的复数形式中如果虚部为 "负的",输出的时候,也要写成 + -i 的形式,例如:(11+-2i)不能输出 11-2i。

🍃3.最终相乘的结果,如果实部为 0,也要写上,例如:0 + 5i

2.解题思路

🍃1.从每个复数字符串中间都有一个 "+" 号隔开,我们就能明白此题要将一个复数字符串拆分成两半来计算。可以想到 substring(),indexOf() 等函数。

🍃2.整数部分计算得到一个结果,然后复数部分计算得到一个结果。当然,我们只需要计算实部和虚部,最后再将最终结果以字符串拼接的形式,输出最终的复数字符串。

3.代码示例

public class Demo1 {public static int stringToInt(String str) {int num= 0;int flg = 1;for(int i = 0; i < str.length(); i++) {// 处理特殊情况,当虚部为 -1 和 1 的时候,str.charAt(i) 拿不到 1if(str.charAt(0) == 'i') {return 1;}if(str.charAt(0) == '-' && str.charAt(1) == 'i') {return -1;}// 判断正负if(str.charAt(i) == '-') {flg = -1;}// 计算整数if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {num = num * 10 + (str.charAt(i) - '0');}}return num * flg;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String s1 = scanner.nextLine();String s2 = scanner.nextLine();// 截取整数部分String L1 = s1.substring(0, s1.indexOf('+'));String L2 = s2.substring(0, s2.indexOf('+'));// 截取复数部分String Plural1 = s1.substring(s1.indexOf('+') + 1);String Plural2 = s2.substring(s2.indexOf('+') + 1);// 分别计算两个字符串的实部和虚部int left1 = stringToInt(L1);int left2 = stringToInt(L2);int right1 = stringToInt(Plural1);int right2 = stringToInt(Plural2);// 计算相乘之后得到的 实部和虚部int left = left1 * left2 - right1 * right2;int right = left1 * right2 + right1 * left2;System.out.println(left + "+" + right + "i");}}

运行结果

🍁细节处理

当虚部为 -1 或者 1 的时候,我们在 stringToInt 函数中传过去的参数,就变成了-ii

当传过去的为i的时候,strCharAt(i) 无法拿到1,必须要单独处理;

当传过去的为-i的时候,strCharAt(i) 只能知道虚部是负数,无法得到-1,必须单独处理。

此题一般是常数长度字符串,因此时间复杂度不做讨论。如果要讨论,最多就是遍历两遍字符串。

谢谢观看!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。