📅  最后修改于: 2023-12-03 15:06:26.990000             🧑  作者: Mango
有理数是可以表示为两个整数的比值的数,其中被除数和除数都是整数并且除数不为零。具有以下性质:
有理数可以用有限小数或无限循环小数的形式表示,例如:
将小数转换为分数,可以将小数的前面部分作为分子,将分子的十进制位数作为分母的10的位数幂,然后再简化分数即可。
例如:
在编程中,可以使用整数类型表示有理数的分子和分母,也可以使用浮点数类型表示有理数的小数形式。对于浮点数类型,需要注意精度损失问题。
示例代码(Python):
class RationalNumber:
def __init__(self, numerator: int, denominator: int):
if denominator == 0:
raise ZeroDivisionError("Denominator cannot be zero!")
gcd = self._get_gcd(numerator, denominator)
self.numerator = numerator // gcd
self.denominator = denominator // gcd
def _get_gcd(self, a: int, b: int) -> int:
if b == 0:
return a
return self._get_gcd(b, a % b)
def __add__(self, other: 'RationalNumber') -> 'RationalNumber':
num = self.numerator * other.denominator + other.numerator * self.denominator
den = self.denominator * other.denominator
return RationalNumber(num, den)
def __sub__(self, other: 'RationalNumber') -> 'RationalNumber':
num = self.numerator * other.denominator - other.numerator * self.denominator
den = self.denominator * other.denominator
return RationalNumber(num, den)
def __mul__(self, other: 'RationalNumber') -> 'RationalNumber':
num = self.numerator * other.numerator
den = self.denominator * other.denominator
return RationalNumber(num, den)
def __truediv__(self, other: 'RationalNumber') -> 'RationalNumber':
if other.numerator == 0:
raise ZeroDivisionError("Division by zero!")
num = self.numerator * other.denominator
den = self.denominator * other.numerator
return RationalNumber(num, den)
def __str__(self) -> str:
return f"{self.numerator}/{self.denominator}"
以上代码实现了四则运算和字符串表示,除法运算处理了分母为零的情况。可以使用如下方式进行测试:
a = RationalNumber(2, 3)
b = RationalNumber(1, 6)
print(a + b) # 5/6
print(a - b) # 1/2
print(a * b) # 1/9
print(a / b) # 4/1
有理数是可以表示为两个整数比值的数,具有加、减、乘、除等基本运算。在编程中可以用整数和浮点数表示,浮点数需要注意精度问题。