fork download
  1. import sys
  2.  
  3. DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  4.  
  5.  
  6. def char_to_num(c):
  7. if "0" <= c <= "9":
  8. return ord(c) - ord("0")
  9. return ord(c.upper()) - ord("A") + 10
  10.  
  11.  
  12. def to_decimal(s, base):
  13. n = 0
  14. for c in s:
  15. n = n * base + char_to_num(c)
  16. return n
  17.  
  18.  
  19. def from_decimal(n, base):
  20. if n == 0:
  21. return "0"
  22. result = ""
  23. while n > 0:
  24. result = DIGITS[n % base] + result
  25. n //= base
  26. return result
  27.  
  28.  
  29. def convert(s, from_base, to_base):
  30. return from_decimal(to_decimal(s, from_base), to_base)
  31.  
  32.  
  33. def main():
  34. if len(sys.argv) == 4:
  35. num, from_base, to_base = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
  36. print(f"{num} ({from_base} 进制) = {convert(num, from_base, to_base)} ({to_base} 进制)")
  37. return
  38.  
  39. examples = [("255", 10, 16), ("FF", 16, 2), ("11111111", 2, 10)]
  40. for num, fb, tb in examples:
  41. print(f"{num} ({fb} 进制) = {convert(num, fb, tb)} ({tb} 进制)")
  42.  
  43.  
  44. if __name__ == "__main__":
  45. main()
Success #stdin #stdout 0.07s 14128KB
stdin
Standard input is empty
stdout
255 (10 进制) = FF (16 进制)
FF (16 进制) = 11111111 (2 进制)
11111111 (2 进制) = 255 (10 进制)