最大公约数的三种解法

一、穷 举 法

int divi_0(int x, int y)
{
	int i=0;
	if (x < y)
	{
		int temp = y;
		y = x;
		x = temp;
	}

	for (i = y; i >= 1; i--)
	{
		if (x%i == 0 && y%i == 0)
		{
			return i;
		}
	}

}

二、辗 转 相 除 法(欧几里德算法又称辗转相除法)

int divi_1(int x, int y)
{
	int temp=0;
	while (x%y)
	{
		temp = x%y;
		x = y;
		y = temp;
	}
	temp = y;

	return temp;
}

三、更 相 减 损 术

int divi_2(int x, int y)
{
	//非递归实现
	int temp=0;
	while (x != y)
	{
		if (x > y)
		{
			x = x - y;
		}
		else
			y = y - x;
	}
	return x;
	//递归实现
	if (x == y)
	{
		return x;
	}
	else if (x > y)
	{
		return divi_2(x - y, y);
	}
	else
	{
		return divi_2(y - x, x);
	}

}

主函数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>


int main()
{
	int x, y;
	scanf("%d %d", &x, &y);

	int ret=divi_0(x,y);
	printf("%d", ret);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/includeevey/article/details/125251213