首页 > 试题广场 >

复数乘法

[编程题]复数乘法
  • 热度指数:534 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个表示复数的字符串,输出它们相乘的结果的字符串
复数字符串用a+bi表示(a, b 为整数, i为虚数单位,i2=1)

输入描述:
两个表示复数的字符串


输出描述:
两个数相乘的结果的字符串
示例1

输入

1+2i
2+1

输出

0+5i

说明

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

输入

1+-2i
3+4i

输出

11+-2i

说明

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

*/
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
})
const maxLine = 2;
let input = [];
function parse(str) {
  const arr = str.split('+');
  const a = parseInt(arr[0]);
  let b;
  if (arr[1] === '1') {
    b = 1;
  } else {
    b = parseInt(arr[1].slice(0, -1));
  }
  return {a, b}
}
function solution(input) {
  const num1 = parse(input[0]);
  const num2 = parse(input[1]);
  return `${num1.a * num2.a - num1.b * num2.b}+${num1.b*num2.a + num1.a*num2.b}i`
}
rl.on('line', (line) => {
  input.push(line);
  if (input.length === maxLine) {
    console.log(solution(input));
    rl.close();
  }
})
发表于 2020-02-03 16:50:41 回复(0)
JavaScript(Node) 😎题目:bilibili📺-复数字符串(parseInt+拼接+数学)
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 2){
        let a = inArr[0].split('+').map(e=>parseInt(e))
        let b = inArr[1].split('+').map(e=>parseInt(e))
        let res = a[0]*b[0] - a[1]*b[1] +'+'+((a[0]*b[1]+a[1]*b[0])+'i')
        console.log(res)

    }
})


发表于 2020-02-27 14:56:09 回复(0)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
typedef struct
{
    int a;
    int b;
}complex;
 
 
complex cmp_mul(complex cmp1,complex cmp2)
{
    complex tmp;
    tmp.a = cmp1.a * cmp2.a - cmp1.b * cmp2.b;
    tmp.b = cmp1.a * cmp2.b + cmp1.b * cmp2.a;
    return tmp;
}
 
 
 
int main()
{
    complex cmp1,cmp2,cmp3;
 
    scanf("%d+%di",&cmp1.a,&cmp1.b);
    scanf("%d+%di",&cmp2.a,&cmp2.b);
    cmp3 = cmp_mul(cmp1,cmp2);
 
    printf("%d+%di\n",cmp3.a,cmp3.b);
    return 0;
}


发表于 2020-02-02 03:32:20 回复(1)
#include <iostream>
#include <string>

using namespace std;

int str2int(string& str){
    int flag = 1;
    int num = 0;
    for (int i = 0; i < str.size(); ++i){
        if (str[i] == '-')
            flag = -1;
        else if ('0' <= str[i] && str[i] <= '9')
            num = num * 10 + (str[i] - '0');
    }
    return flag * num;
}

int main(){
    string str1, str2;
    cin >> str1 >> str2;
    string str1_first = str1.substr(0, str1.find('+'));
    string str2_first = str2.substr(0, str2.find('+'));
    string str1_second = str1.substr(str1.find('+') + 1);
    string str2_second = str2.substr(str2.find('+') + 1);
    
    int num1_first = str2int(str1_first);
    int num1_second = str2int(str1_second);
    int num2_first = str2int(str2_first);
    int num2_second = str2int(str2_second);
    
    int result_first = num1_first * num2_first - num1_second * num2_second;
    int result_second = num1_first * num2_second + num1_second * num2_first;
    
    cout << result_first << "+" << result_second << "i" << endl;
    return 0;
}


发表于 2022-01-26 18:01:09 回复(0)
package main
 
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)
 
func main() {
 
    scanner := bufio.NewScanner(os.Stdin)

    scanner.Scan()
    text1 := scanner.Text()
    num1 := strings.Split(text1, "+")
 
    scanner.Scan()
    text2 := scanner.Text()
    num2 := strings.Split(text2, "+")
 
    a0, _ := strconv.Atoi(num1
[0]) //strconv.ParseInt(num1
[0], 10, 32)
    b0, _ := strconv.Atoi(num2
[0]) //strconv.ParseInt(num2
[0], 10, 32)
 
    a1, _ := strconv.Atoi(strings.Replace(num1
[1], "i", "", 1))
    b1, _ := strconv.Atoi(strings.Replace(num2
[1], "i", "", 1))
 
    realVal := a0*b0 - a1*b1
    imgVal := a0*b1 + a1*b0
 
    var rtStr string = strconv.Itoa(realVal) + "+" + strconv.Itoa(imgVal) + "i"  ////   strconv.Itoa
 
    fmt.Print(rtStr)
 
}
Golang

编辑于 2022-01-18 09:04:01 回复(0)
为什么最后一个测试样例是1+2i     2+1? 2+1是个什么东西
发表于 2021-07-12 17:41:15 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String num1;
        while((num1 = br.readLine()) != null){
            String[] strArr1 = num1.split("\\+");
            // 构造一个数组存储第一个复数实部与虚部
            int[] arr1 = new int[2];
            arr1[0] = Integer.parseInt(strArr1[0]);
            if(strArr1[1].equals("i")){
                arr1[1] = 1;
            }else if(strArr1[1].equals("-i")){
                arr1[1] = -1;
            }else{
                int len = strArr1[1].length();
                arr1[1] = Integer.parseInt(strArr1[1].substring(0, len - 1));
            }
            String[] strArr2 = br.readLine().trim().split("\\+");
            // 构造一个数组存储第二个复数实部与虚部
            int[] arr2 = new int[2];
            arr2[0] = Integer.parseInt(strArr2[0]);
            if(strArr2[1].equals("i")){
                arr2[1] = 1;
            }else if(strArr2[1].equals("-i")){
                arr2[1] = -1;
            }else{
                // 其实第一个if不合理,这么做只是因为有一个测试用例有问题,面向测试编程
                if(strArr2[1].equals("1")){
                    arr2[1] = 1;
                }else{
                    int len = strArr2[1].length();
                    arr2[1] = Integer.parseInt(strArr2[1].substring(0, len - 1));
                }
            }
            // 分别计算实部和虚部
            int real = 0, complex = 0;
            real += arr1[0] * arr2[0];
            real += -(arr1[1] * arr2[1]);
            complex += ((arr1[0] * arr2[1]) + (arr1[1] * arr2[0]));
            // 打印结果
            System.out.println(String.valueOf(real) + "+" + String.valueOf(complex) + "i");
        }
    }
}

发表于 2020-10-15 15:52:43 回复(0)
import java.util.*;
import java.lang.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
     String s1= sc.nextLine();
     String s2=sc.nextLine();
     String[] sps1=s1.split("\\+");
     String[] sps2=s2.split("\\+");
     String[]  b=sps1[1].split("i");
        String[] d=sps2[1].split("i");
     int sum1=0;
     int sum2=0;
     int n=b.length;
     int m=d.length;
     /*if(n!=0&&m!=0) {
         String[] b=sps1[1].split("i");
         String[] d=sps2[1].split("i");
          sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0])-Integer.parseInt(b[0])*Integer.parseInt(d[0]);
          sum2=Integer.parseInt(sps1[0])*Integer.parseInt(d[0])+Integer.parseInt(sps2[0])*Integer.parseInt(b[0]);
     }else if(n==0&&m!=0){
         String[] d=sps2[1].split("i");
         sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0])-Integer.parseInt(d[0]);
         sum2=Integer.parseInt(sps1[0])*Integer.parseInt(d[0])+Integer.parseInt(sps2[0]);
     }else if(!= 0&&sps2.length==0){
         String[] b=sps1[1].split("i");
          sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0])-Integer.parseInt(b[0]);
          sum2=Integer.parseInt(sps1[0])+Integer.parseInt(sps2[0])*Integer.parseInt(b[0]);
     }else if(n==0&&sps2.length==0){
          sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0]);
          sum2=Integer.parseInt(sps1[0])+Integer.parseInt(sps2[0]);
     }*/
     if(n==0){
         if(m==0){
         sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0]);
         sum2=Integer.parseInt(sps1[0])+Integer.parseInt(sps2[0]);}
         else{
             //String[] d=sps2[1].split("i");
             sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0])-Integer.parseInt(d[0]);
             sum2=Integer.parseInt(sps1[0])*Integer.parseInt(d[0])+Integer.parseInt(sps2[0]);
         }
     }else {
         if(m==0){
             sum1=Integer.parseInt(sps1[0])*Integer.parseInt(sps2[0])-Integer.parseInt(b[0]);
             sum2=Integer.parseInt(sps1[0])+Integer.parseInt(sps2[0])*Integer.parseInt(b[0]);
         }else {
             sum1 = Integer.parseInt(sps1[0]) * Integer.parseInt(sps2[0]) - Integer.parseInt(b[0]) * Integer.parseInt(d[0]);
             sum2 = Integer.parseInt(sps1[0]) * Integer.parseInt(d[0]) + Integer.parseInt(sps2[0]) * Integer.parseInt(b[0]);
         }
     }
        String str = sum1 + "+" + sum2 + "i";
        System.out.println(str);
    }
}

发表于 2020-08-14 11:22:59 回复(0)
这道题直接简单数学计算就可以了(永远只有两个式子,所以只有四个数,四个数进行加减乘除就可以了)
var line1 = readline().split('+');
var a = parseInt(line1[0]);
var str = line1[1].split('i');
var b = parseInt(str[0]);
var line2 = readline().split('+');
var c = parseInt(line2[0]);
str = line2[1].split('i');
var d = parseInt(str[0]);

var i = a*c - b*d;
var j = a*d + b*c;
console.log(i+'+'+j+'i');


发表于 2020-08-13 15:53:00 回复(0)