lib.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. pub fn min_digit(mut n: i32) -> i32 {
  2. // min digit in the number
  3. let mut r = 10;
  4. while n != 0 {
  5. if n%10 < r {
  6. r=n%10;
  7. }
  8. n /= 10;
  9. }
  10. r
  11. }
  12. pub fn max_digit(mut n: i32) -> i32 {
  13. // max digit in the number
  14. let mut r = 0;
  15. while n != 0 {
  16. if n%10 > r {
  17. r=n%10;
  18. }
  19. n /= 10;
  20. }
  21. r
  22. }
  23. pub fn replace_digit(mut n: i32, replaced: i32, replace_with: i32) -> i32 {
  24. // replace digit in number
  25. let radix = 10;
  26. let mut reversed = 0;
  27. while n != 0 {
  28. if n%10 != replaced {
  29. reversed = reversed * radix + n % radix;
  30. } else {
  31. reversed = reversed * radix + replace_with % radix;
  32. }
  33. n /= radix;
  34. }
  35. reversed=reverse_n(reversed);
  36. reversed
  37. }
  38. pub fn remove_n(mut n: i32, removed: i32) -> i32 {
  39. //remove digit from number
  40. let radix = 10;
  41. let mut reversed = 0;
  42. while n != 0 {
  43. if n%10 != removed {
  44. reversed = reversed * radix + n % radix;
  45. }
  46. n /= radix;
  47. }
  48. reversed=reverse_n(reversed);
  49. reversed
  50. }
  51. pub fn cat_rite(mut n: i32, cat: i32) -> i32 {
  52. // remove digit in rite in the number
  53. let mut count = 0;
  54. let mut nn = 1;
  55. n = reverse_n(n);
  56. while count != cat {
  57. count = count +1;
  58. nn=add_digit(nn, 0);
  59. }
  60. n = n%nn;
  61. n
  62. }
  63. pub fn cat_left(mut n: i32, cat: i32) -> i32 {
  64. // remove digit in left in the number
  65. let mut count = 0;
  66. let mut nn = 1;
  67. while count != cat {
  68. count = count +1;
  69. nn=add_digit(nn, 0);
  70. }
  71. n = n%nn;
  72. n
  73. }
  74. pub fn add_digit(mut n: i32, digit: i32) -> i32 {
  75. // add digit to number
  76. n=n*10;
  77. n=n+digit;
  78. n
  79. }
  80. pub fn count_n(mut n: i32) -> i32 {
  81. // count the digits in the number
  82. if n == 0 {
  83. return 1;
  84. }
  85. let mut count = 0;
  86. if n <0 {
  87. n=n*-1
  88. }
  89. while n>0 {
  90. n=n/10;
  91. count = count +1;
  92. }
  93. count
  94. }
  95. pub fn last_diget(mut n: i32) -> i32 {
  96. // last digit in the number
  97. if n <0 {
  98. n = n*-1
  99. }
  100. n %10
  101. }
  102. pub fn first_diget(num: i32) -> i32 {
  103. // first digit in the number
  104. if num/10 == 0 {
  105. return num;
  106. }
  107. first_diget(num/10)
  108. }
  109. pub fn reverse_n(mut n: i32) -> i32 {
  110. // reverse the number
  111. let radix = 10;
  112. let mut reversed = 0;
  113. while n != 0 {
  114. reversed = reversed * radix + n % radix;
  115. n /= radix;
  116. }
  117. reversed
  118. }