From 7a6db2e0fccd099735fa645efa89249ff4e647c9 Mon Sep 17 00:00:00 2001 From: Sangeeth Sudheer Date: Tue, 16 Aug 2022 01:23:54 +0530 Subject: [PATCH] gcd using args --- gcd/src/main.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/gcd/src/main.rs b/gcd/src/main.rs index 5a323aa..e500f63 100644 --- a/gcd/src/main.rs +++ b/gcd/src/main.rs @@ -1,3 +1,8 @@ +// The below imported trait/extension is for adding a `from_str` method which will let us convert +// strings to other types +use std::env; +use std::str::FromStr; + fn gcd(mut a: u64, mut b: u64) -> u64 { while a > 0 { if a < b { @@ -18,8 +23,22 @@ fn test_gcd() { } fn main() { - println!("gcd(4, 6) is {}", gcd(4, 6)); - println!("gcd(7, 49) is {}", gcd(7, 49)); - println!("gcd(3, 7) is {}", gcd(3, 7)); - println!("gcd(128, 16) is {}", gcd(128, 16)); + let mut numbers = Vec::new(); + + for arg in env::args().skip(1) { + numbers.push(u64::from_str(&arg).expect("error parsing argument")); + } + + if numbers.len() == 0 { + eprintln!("Usage: gcd NUMBER ..."); + std::process::exit(1); + } + + let mut result = numbers[0]; + + for num in &numbers[1..] { + result = gcd(*num, result); + } + + println!("The greatest common divisor of {:?} is {}", numbers, result); }