package main
import (
"fmt"
"math"
)
// 定义一个表示分数的结构体
type Fraction struct {
Numerator int // 分子
Denominator int // 分母
}
// 计算分数的平方根
func (f Fraction) Sqrt() Fraction {
if f.Numerator < 0 {
panic("无法计算负数的平方根")
}
// 使用开方公式计算平方根
sqrtN := int(math.Sqrt(float64(f.Numerator)))
sqrtD := int(math.Sqrt(float64(f.Denominator)))
// 简化分数
return SimplifyFraction(sqrtN, sqrtD)
}
// 简化分数
func SimplifyFraction(numerator, denominator int) Fraction {
divisor := Gcd(int64(numerator), int64(denominator))
return Fraction{
Numerator: numerator / int(divisor),
Denominator: denominator / int(divisor),
}
}
// 使用欧几里得算法计算两个整数的最大公约数
func Gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
return a
}
func main() {
// 创建一个分数示例
f := Fraction{4, 9}
// 计算并输出平方根
sqrt := f.Sqrt()
fmt.Printf("平方根为: %d/%d\n", sqrt.Numerator, sqrt.Denominator)
}
这段代码定义了一个表示分数的结构体Fraction
,并实现了计算分数平方根的方法Sqrt
。同时,还提供了一个简化分数的函数SimplifyFraction
,以及一个计算最大公约数的函数Gcd
。最后,在main
函数中创建了一个示例分数并输出了它的平方根。这个例子展示了如何在Go语言中处理分数的基本操作,并且对于学习这门语言的初学者来说,是一个很好的入门级教学资源。