decimalbit.go 731 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package common
  2. func pow(x, n int) int {
  3. if x == 0 {
  4. return 0
  5. }
  6. if n == 0 {
  7. return 1
  8. }
  9. ret := x
  10. for i := 1; i < n; i++ {
  11. ret *= x
  12. }
  13. return ret
  14. }
  15. func decimalOr(left, right, bit int) int {
  16. if left == 0 && right == 0 {
  17. return 0
  18. }
  19. ret := 0
  20. if left%10 > 0 || right%10 > 0 {
  21. ret = pow(10, bit)
  22. }
  23. return ret + decimalOr(left/10, right/10, bit+1)
  24. }
  25. func decimalAnd(left, right, bit int) int {
  26. if left == 0 || right == 0 {
  27. return 0
  28. }
  29. ret := 0
  30. if left%10 > 0 && right%10 > 0 {
  31. ret = pow(10, bit)
  32. }
  33. return ret + decimalAnd(left/10, right/10, bit+1)
  34. }
  35. func DecimalOr(left, right int) int {
  36. return decimalOr(left, right, 0)
  37. }
  38. func DecimalAnd(left, right int) int {
  39. return decimalAnd(left, right, 0)
  40. }