Advertisement
Guest User

Untitled

a guest
Mar 26th, 2018
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.86 KB | None | 0 0
  1.  
  2. fn pow(x:i32, k:i32) -> i32{ if k == 0 {1}  else {x*pow(x,k-1)} }
  3.  
  4. fn sum(v: Vec<i32>) -> i32 { let mut s = 0; for i in v { s+= i}; s }
  5.  
  6. fn nb_len(k:i32) -> i32 {
  7.   if k>0 { ((k as f64).ln()/(10. as f64).ln()) as i32 + 1   } else {1}
  8. }
  9.  
  10.  
  11. fn digit(n:i32,k:i32) -> i32 {
  12.   return (n /(pow(10,k)) - (n / pow(10,k+1))*10);
  13. }
  14.  
  15. fn to_digits(n:i32) -> Vec<i32> {
  16.   let mut res = Vec::new();
  17.   for i in 0..nb_len(n) {   res.push(digit(n,i) );   }
  18.   res
  19. }
  20.  
  21.  
  22. fn fizz(mut n:i32) -> bool {
  23.   while nb_len(n) > 1 {
  24.     n = sum(to_digits(n));
  25.   }
  26.   (n == 3 || n == 6 || n == 9)
  27. }
  28.  
  29. fn buzz(n:i32) -> bool {digit(n,0) == 0 || digit(n,0) == 5}
  30.  
  31. fn main() {
  32.   for i in 0..100 {
  33.     if fizz(i) {
  34.       if buzz(i) {  print!("fizzbuzz ");   }
  35.       else {print!("fizz ");}
  36.     }
  37.     else if buzz(i) {print!("buzz ");}
  38.     else {print!("{} ", i);}
  39.   }
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement