求两个数最大公约数.2

#include<stdio.h>
#pragma warning(disable:4996)

int get_max(int m, int n)
{
	//方法1
	//int i = m > n ? n : m;//选择一个小数开始遍历
	//for (; i > 0;i--)
	//{
	//	if (0 == m%i && 0 == n%i)
	//	{
	//		return i;
	//	}
	//}
	//方法2 辗转相减法
	//while (1)
	//{
	//	if (m > n)
	//	{
	//		m -= n;
	//	}
	//	else if (m < n)//注意 if else 逻辑问题
	//	{
	//		n -= m;
	//	}
	//	else
	//	{
	//		break;//‘m’=‘n’时就是m和n已经辗转相减到两个数字的公约数了;
	//	}
	//}
	//方法3 辗转相除法
	while (m*n != 0)//此处条件是为了判断m和n(m n中内容为余数)是否有零,如果有则说明余数为零有数字可以整除了。即找到公约数,跳出循环。
	{
		if (m > n)
		{
			m %= n;
		}
		else if (m < n)
		{
			n %= m;
		}
		else
		{
			break;
		}
	}
	int i = m == 0 ? n : m;
	return i;
}
int main()
{
	int m = 0;
	int n = 0;
	do{
		printf("Please enter the number:\n");
		scanf("%d %d", &m, &n);
		printf("%d\n", get_max(m, n));
	} while (1);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zn_wuxunian/article/details/80008292