fn main() { let result = find_largest_palindrome(3); println!("Result: {result}"); } fn find_largest_palindrome(digits: u32) -> i64 { let mut largest = 0; let lower = 10_i64.pow(digits - 1); let upper = 10_i64.pow(digits); for i in lower..upper { for j in lower..upper { let product = i * j; if check_palindrome(product) && product > largest { largest = product; } } } largest } fn check_palindrome(number: i64) -> bool { let number: Vec = number.to_string().chars().collect(); let upper = (number.len() as f64 / 2.0).ceil() as usize; for pos in 0..upper { if number[pos] != number[number.len() - 1 - pos] { return false; } } true } #[cfg(test)] mod tests { use crate::find_largest_palindrome; #[test] fn it_works() { let result = find_largest_palindrome(2); assert_eq!(result, 9009); } }