diff --git a/src/bin/problem_4.rs b/src/bin/problem_4.rs new file mode 100644 index 0000000..ae26923 --- /dev/null +++ b/src/bin/problem_4.rs @@ -0,0 +1,42 @@ +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; + } + } + } + + return 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; + } + } + return true; +} + +#[cfg(test)] +mod tests { + use crate::find_largest_palindrome; + + #[test] + fn it_works() { + let result = find_largest_palindrome(2); + assert_eq!(result, 9009); + } +}