use inquire::Text; use rug::{Complete, Integer}; use std::time::Instant; mod mpn; fn main() { let radix = match Text::new("Введите основание системы счисления:").prompt() { Ok(text) => text, Err(_) => return, }; let radix = match radix.parse::() { Ok(number) => number, Err(_) => { println!("Основание должно быть десятичным числом"); return; } }; let a_text = match Text::new("Введите число:").prompt() { Ok(text) => text, Err(_) => return, }; let b_text = match Text::new("Введите число:").prompt() { Ok(text) => text, Err(_) => return, }; let a = match mpn::Number::parse(&a_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; let b = match mpn::Number::parse(&b_text, radix as usize) { Ok(number) => number, Err(what) => { println!("{what}"); return; } }; let a_rug = match Integer::parse_radix(a_text, radix) { Ok(parsed) => parsed.complete(), Err(_) => { println!("Не удалось считать число"); return; } }; let b_rug = match Integer::parse_radix(b_text, radix) { Ok(parsed) => parsed.complete(), Err(_) => { println!("Не удалось считать число"); return; } }; let mpn_sum_start = Instant::now(); let mpn_sum = a + b; let mpn_sum_elapsed = mpn_sum_start.elapsed(); let rug_sum_start = Instant::now(); let _rug_sum = a_rug + b_rug; let rug_sum_elapsed = rug_sum_start.elapsed(); println!("Сумма: {}", mpn_sum); println!( "Операция суммы выполнена в mpn за {} наносекунд", mpn_sum_elapsed.as_nanos() ); println!( "Операция суммы выполнена в rug за {} наносекунд", rug_sum_elapsed.as_nanos() ); }