题目
求两个数的最大公约数
重点
判断两个数的绝对值的最小值,而不是两个数的最小值
方法:
math包的
func Abs(x float64) float64
注意:
因为公约数是整数的公约数,所以不能输入小数,而上述方法返回值为小数,所以需要转换。
思路(短除法)
两个数(n1,n2)的最大公约数(gcd)一定是能同时被两个数都整除的,且同时最大公约数一定小于或者等于两个数中绝对值的最小数(min)。由此可知:
- gcd <= min
- n1 % gcd == 0 && n2 % gcd ==0
代码
package main
import (
"fmt"
"math"
)
//求两个数的GCD(最大公约数)
func gcd(n1, n2 int) int {
//将输入整数转换成绝对值
n1 = int(math.Abs(float64(n1)))
n2 = int(math.Abs(float64(n2)))
//判断两个数绝对值的最小值
var min int = n1
var gcd int
if n1 > n2 {
min = n2
}
for i := 1; i <= min; i++ {
if n1 % i == 0 && n2 % i == 0 {
gcd = i
}
}
return gcd
}
func main() {
var n1, n2 int
for {
fmt.Printf("请输入两个非0的整数: ")
fmt.Scanln(&n1, &n2)
if n1 == 0 || n2 == 0 {
fmt.Println("输入错误!")
continue
}
fmt.Printf("%v和%v的最大公约数为: %v\n\n",

这篇博客介绍了如何求两个数的最大公约数,首先通过math包的Abs函数判断绝对值最小的数,然后采用短除法的思路编写代码并展示结果。进一步探讨了欧几里德算法,利用迭代法实现,并给出了进阶的代码及运算结果。文章指出未处理小数输入的缺陷,需进行错误处理。
最低0.47元/天 解锁文章
313

被折叠的 条评论
为什么被折叠?



