use std::fmt; use std::str::FromStr; #[derive(Debug, PartialEq)] struct Complex { real: i32, imag: i32, } #[derive(Debug)] struct InvalidComplex; impl FromStr for Complex { type Err = InvalidComplex; fn from_str(input: &str) -> Result { let parts: Vec<&str> = input.split('+').collect(); let real = parts[0].parse::().unwrap(); let imag = parts[1].trim_end_matches('i').parse::().unwrap(); Ok(Complex { real, imag }) } } impl fmt::Display for Complex { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}+{}i", self.real, self.imag) } } impl Solution { pub fn complex_number_multiply(num1: String, num2: String) -> String { let left: Complex = num1.parse().unwrap(); let right: Complex = num2.parse().unwrap(); (Complex { real: left.real * right.real - left.imag * right.imag, imag: left.real * right.imag + left.imag * right.real, }) .to_string() } }