哔哩哔哩笔试编程题2023分享

1.复数乘法

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

2.解析

/*
复数乘法: (a + bi)*(c + di) = ac + bd*i^2 + cbi + adi
其中i^2 = -1
*/
#include <string>
#include <iostream>
using namespace std;
//字符串转整形
int stringtoInt(string s){
int num = 0;
int flag = 1;
for (int i = 0; i < s.size(); i++){
//如果有负号,说明是负数
if (s[i] == '-')
flag = -1;
//只利用数字字符,i不使用
else if (s[i] >= '0' && s[i] <= '9')
num = num * 10 + (s[i] - '0');
}
return num * flag;
}
int main(){
string s1, s2;
while (cin >> s1 >> s2){
//截取整数部分
string s1First = s1.substr(0, s1.find('+'));
string s2First = s2.substr(0, s2.find('+'));
//截取复数部分
//复数1
string s1Second = s1.substr(s1.find('+') + 1);
//复数2
string s2Second = s2.substr(s2.find('+') + 1);
//把字符串转换成整数
int s1F = stringtoInt(s1First);
int s2F = stringtoInt(s2First);
int s1S = stringtoInt(s1Second);
int s2S = stringtoInt(s2Second);
//整数部分
int F = s1F*s2F - s1S*s2S;
//复数
int S = s1F*s2S + s1S*s2F;
cout << F << "+" << S << "i" << endl;
}
return 0;
}
/*java*/
public class Main
{
public static int stringtoInt(String s){
int num = 0;
int flag = 1;
for (int i = 0; i < s.length(); i++){
//如果有负号,说明是负数
if (s.charAt(i) == '-')
flag = -1;
//只利用数字字符,i不使用
else if (s.charAt(i) >= '0' && s.charAt(i) <= '9')
num = num * 10 + (s.charAt(i) - '0')
}
return num * flag;
}
public static void main(String[] args) {
String s1, s2;
Scanner scanner = new Scanner(System.in);
s1 = scanner.nextLine();
s2 = scanner.nextLine();
//截取整数部分
String s1First = s1.substring(0, s1.indexOf('+'));
String s2First = s2.substring(0, s2.indexOf('+'));
//截取复数部分
//复数1
String s1Second = s1.substring(s1.indexOf('+') + 1);
//复数2
String s2Second = s2.substring(s2.indexOf('+') + 1);
//把字符串转换成整数
int s1F = stringtoInt(s1First);
int s2F = stringtoInt(s2First);
int s1S = stringtoInt(s1Second);
int s2S = stringtoInt(s2Second);
//整数部分
int F = s1F*s2F - s1S*s2S;
//复数
int S = s1F*s2S + s1S*s2F;
System.out.println(F + "+" + S + "i");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值