Skip to content

Instantly share code, notes, and snippets.

@emedvedev
Last active October 28, 2015 22:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emedvedev/8e1dfbed740f2a873494 to your computer and use it in GitHub Desktop.
Save emedvedev/8e1dfbed740f2a873494 to your computer and use it in GitHub Desktop.
import string
class BaseNumber():
def __init__(self, number=None, numerator=None, denominator=None):
if numerator and denominator:
self.numerator = int(numerator)
self.denominator = int(denominator)
elif number:
self.num = float(number)
self.mapping = string.digits + string.letters
def _int_to_base(self, num, base):
if num < 0:
sign = -1
elif num == 0:
return self.mapping[0]
else:
sign = 1
num *= sign
digits = []
while num:
digits.append(self.mapping[num % base])
num /= base
if sign < 0:
digits.append('-')
digits.reverse()
return ''.join(digits)
def base(self, base):
base = int(base)
if self.numerator and self.denominator:
num = 1. * self.numerator / self.denominator
else:
num = self.num
integral, point, fractional = str(num).strip().partition('.')
num = int(integral + fractional) * 10 ** -len(fractional)
num = self._int_to_base(int(round(num/base ** -len(fractional))), base)
return num[:-len(fractional)] + '.' + num[-len(fractional):]
def __repr__(self):
if self.numerator and self.denominator:
return str(self.numerator)+"/"+str(self.denominator)
else:
return str(self.num)
given = raw_input().split(' ')
a = BaseNumber(numerator=given[0], denominator=given[1])
print a.base(given[2])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment