use rand::{Rng, SeedableRng};
use rand::rngs::StdRng;
use std::time::{SystemTime, UNIX_EPOCH};
fn generate_n_digit_number(n: usize) -> Result<u64, String> {
if n < 1 {
return Err("n must be a positive integer (>= 1).".to_string());
}
let lower_bound: u64 = if n > 1 {
10u64.pow((n - 1) as u32)
} else {
0
};
let upper_bound: u64 = 10u64.pow(n as u32) - 1;
let seed = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("Time went backwards")
.as_nanos() as u64;
let mut rng = StdRng::seed_from_u64(seed);
let r = rng.random_range(lower_bound..=upper_bound);
Ok(r)
}
fn main() {
println!("{:?}", generate_n_digit_number(1).unwrap());
println!("{:?}", generate_n_digit_number(4).unwrap());
println!("{:?}", generate_n_digit_number(10).unwrap());
}
/*
run:
6
2841
5620598483
*/