版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lockey23/article/details/81513773
有理数
有理数是“数与代数”领域中的重要内容之一,在现实生活中有广泛的应用,是继续学习实数、代数式、方程、不等式、直角坐标系、函数、统计等数学内容以及相关学科知识的基础。数学上,有理数是一个整数a和一个正整数b的比,例如3/8,通则为a/b。0也是有理数。有理数是整数和分数的集合,整数也可看做是分母为一的分数。有理数的小数部分是有限或为无限循环的数。不是有理数的实数称为无理数,即无理数的小数部分是无限不循环的数。
有理数集可以用大写黑正体符号Q代表。但Q并不表示有理数,有理数集与有理数是两个不同的概念。有理数集是元素为全体有理数的集合,而有理数则为有理数集中的所有元素。
直接上代码:
class Rational(a:Int,b:Int){
require(b!=0)
private val g = gcd(a.abs,b.abs)//计算分子分母的最大公约数实现约分
var nm = a/g
var dm = b/g
def this(n:Int) = this(n,1)//对于输入单整数的情况,即分母为1
override def toString = if(dm != 1){ nm +"/"+ dm }else nm.toString()
//重写toString方法,返回有理数格式的结果
def +(that:Rational):Rational=//that指代的是传入的被加有理数,以下对于加减乘除都进行了运算符重载,所以每个函数会有两种定义
new Rational(
nm*that.dm +that.nm*dm,
dm*that.dm
)
def +(i:Int):Rational =
new Rational(nm+i*dm,dm)
def *(that:Rational):Rational=
new Rational(nm*that.nm,dm*that.dm)
def *(i:Int):Rational=
new Rational(i*nm,dm)
def -(that:Rational):Rational=
new Rational(
nm*that.dm -that.nm*dm,dm*that.dm
)
def -(i:Int):Rational=
new Rational(nm-i*dm,dm)
def /(that:Rational):Rational=
new Rational(
nm*that.dm,dm*that.nm
)
def /(i:Int):Rational=
new Rational(nm,dm*i)
private def gcd(a:Int,b:Int):Int=if(b==0)a else gcd(b,a%b)
}
#以下为测试用例
val x = new Rational(3,8)
println("x = "+x)
val y = new Rational(2)
println("y = "+y)
var z = x+y
println("x + y = "+z)
var o = x*y
println("x * y = "+o)
var xx = x+x*y
println("x + x * y = "+xx)
println("x - y = "+(x-y))
println("x / y = "+x/y)