init
This commit is contained in:
66
problems/p26/src/main.rs
Normal file
66
problems/p26/src/main.rs
Normal file
@@ -0,0 +1,66 @@
|
||||
// 分数分为有限小数与无限循环小数
|
||||
//
|
||||
// 除数不变,当被除数出现相同时,出现循环
|
||||
use std::collections::HashSet;
|
||||
|
||||
fn div_to_vec(denominator: u32) -> Vec<u32> {
|
||||
let mut remainder_set: HashSet<u32> = HashSet::new();
|
||||
let deno_digits = denominator.to_string().len() as u32;
|
||||
let mut remainder = 10u32.pow(deno_digits);
|
||||
remainder_set.insert(1);
|
||||
|
||||
let mut xiaoshu = Vec::new();
|
||||
let mut divider = remainder / denominator;
|
||||
xiaoshu.push(divider);
|
||||
remainder %= denominator;
|
||||
remainder_set.insert(remainder);
|
||||
while remainder != 0 {
|
||||
remainder *= 10u32.pow(deno_digits);
|
||||
divider = remainder / denominator;
|
||||
xiaoshu.push(divider);
|
||||
remainder %= denominator;
|
||||
if remainder_set.contains(&remainder) {
|
||||
remainder *= 10u32.pow(deno_digits);
|
||||
divider = remainder / denominator;
|
||||
xiaoshu.push(divider);
|
||||
break;
|
||||
}
|
||||
remainder_set.insert(remainder);
|
||||
}
|
||||
xiaoshu
|
||||
}
|
||||
#[test]
|
||||
fn test_div_to_vec() {
|
||||
assert_eq!(div_to_vec(2), vec![5]);
|
||||
assert_eq!(div_to_vec(4), vec![2, 5]);
|
||||
assert_eq!(div_to_vec(5), vec![2]);
|
||||
}
|
||||
|
||||
fn get_recurring_cycles(denominator: u32) -> u32 {
|
||||
let xiaoshu = div_to_vec(denominator);
|
||||
let last_element = xiaoshu[xiaoshu.len() - 1];
|
||||
let first_idx = xiaoshu.iter().position(|x| x == &last_element).unwrap();
|
||||
let result = xiaoshu.len() - 1 - first_idx;
|
||||
result as u32
|
||||
}
|
||||
#[test]
|
||||
fn test_get_recurring_cycles() {
|
||||
assert_eq!(get_recurring_cycles(6), 1);
|
||||
assert_eq!(get_recurring_cycles(7), 6);
|
||||
assert_ne!(get_recurring_cycles(9), 1);
|
||||
assert_eq!(get_recurring_cycles(11), 2);
|
||||
assert_eq!(get_recurring_cycles(12), 1);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut longest_cycles = 0;
|
||||
for denominator in 1..1000 {
|
||||
let cycles = get_recurring_cycles(denominator);
|
||||
if cycles > longest_cycles {
|
||||
longest_cycles = cycles;
|
||||
}
|
||||
}
|
||||
|
||||
println!("longest_cycles: {longest_cycles}");
|
||||
// FIX: answer incorrect
|
||||
}
|
||||
Reference in New Issue
Block a user