Skip to content

Instantly share code, notes, and snippets.

@ashiato45
Created February 18, 2021 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ashiato45/7219f6011d534950578fa13613ed30e6 to your computer and use it in GitHub Desktop.
Save ashiato45/7219f6011d534950578fa13613ed30e6 to your computer and use it in GitHub Desktop.
mod nary_exp{
struct NaryExpander{
n: i64,
base: i64,
powered: i64
}
impl NaryExpander{
fn new(n: i64, base: i64) -> NaryExpander{
let mut powered = (0..).map(|i|{base.pow(i)}).find(|i|{*i > n}).unwrap();
powered /= base;
NaryExpander{n: n, base: base, powered: powered}
}
}
impl Iterator for NaryExpander{
type Item = i64;
fn next(&mut self) -> Option::<i64>{
if self.powered <= 0{
return None;
}
let res = self.n / self.powered;
self.n %= self.powered;
self.powered /= self.base;
return Some(res);
}
}
#[test]
fn test(){
assert_eq!(NaryExpander::new(765, 10).collect::<Vec<i64>>(), vec![7, 6, 5]);
assert_eq!(NaryExpander::new(7, 2).collect::<Vec<i64>>(), vec![1, 1, 1]);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment