Guest User

Untitled

a guest
May 22nd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. fn factorial(n: usize) -> usize {
  2. match n {
  3. 0 => 1,
  4. _ => n * factorial(n - 1),
  5. }
  6. }
  7.  
  8. fn factorial_to_base10(val: usize) -> usize {
  9. let mut result = 0;
  10. let mut i = 0;
  11. let mut val = val;
  12. while val > 0 {
  13. result += (val % 10) * factorial(i);
  14. i += 1;
  15. val /= 10;
  16. }
  17. result
  18. }
  19.  
  20. fn base10_to_factorial(val: usize) -> usize {
  21. let mut result = 0;
  22. let mut val = val;
  23. let mut digits = Vec::new();
  24. let mut i = 1;
  25. while val > 0 {
  26. digits.push(val % i);
  27. val /= i;
  28. i += 1;
  29. }
  30. for &d in digits.iter().rev() {
  31. result *= 10;
  32. result += d;
  33. }
  34. result
  35. }
  36.  
  37. fn main() {
  38. assert_eq!(463, factorial_to_base10(341010));
  39. assert_eq!(719, factorial_to_base10(543210));
  40.  
  41. assert_eq!(341010, base10_to_factorial(463));
  42.  
  43. for i in 0..factorial(8) {
  44. let f = base10_to_factorial(i);
  45. assert_eq!(factorial_to_base10(f), i);
  46. }
  47. }
Add Comment
Please, Sign In to add comment