输入两个表示复数的字符串,输出它们相乘的结果的字符串
复数字符串用a+bi表示(a, b 为整数, i为虚数单位,i2=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
/** */ 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(); } })
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) } })
#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; }
#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; }
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
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"); } } }
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); } }
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');