求两个数的最大公约数

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

题目

求两个数的最大公约数

重点

判断两个数的绝对值的最小值,而不是两个数的最小值
方法:
math包的
func Abs(x float64) float64
注意:
因为公约数是整数的公约数,所以不能输入小数,而上述方法返回值为小数,所以需要转换。

思路(短除法)

两个数(n1,n2)的最大公约数(gcd)一定是能同时被两个数都整除的,且同时最大公约数一定小于或者等于两个数中绝对值的最小数(min)。由此可知:

  1. gcd <= min
  2. 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",
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值