c语言求两个数的最大公约数

从键盘输入两个整数,输出两个整数的最大公约数。

1.程序风格良好(使用自定义注释模板)

2.使用种算法解决问题

#include "stdio.h"
struct common{}; 
int m;
int n;
void div();//辗转相除法
void sub();//相减法
int exh();//穷举法

//辗转相除法
void div()
{
	int x;
	int a, b;
	a = m;
	b = n;
	if (a > b)
	{
		x = a%b;
	}
	else
	{
		x = a;
		a = b;
		b = x;
		x = a%b;
	}
	while (x != 0)
	{
		a = b;
		b = x;
		x = a%b;
	}
	printf_s("最大公约数是%d。\n", b);
}

//相减法
void sub()
{
	int a, b;
	a = m;
	b = n;
	while (a!=b)
	{
		if (a > b)
		{
			a = a - b;
		}
		else
		{
			b = b - a;
		}
	}
	printf_s("最大公约数是%d。\n", a);
}

//穷举法
int exh()
{
	int x, y=0;
	int a, b;
	a = m;
	b = n;
	if (a>b)
	{
		for  ( x = b; x > 0;  x--)
		{
			if (a%x == 0 && b%x == 0)
			{
				y = x;
				printf_s("最大公约数是%d。\n", y);
				return 0;
			}
		}
	}
	else
	{
		for  (x = a; x >  0; x--)
		{
			if (a%x == 0 && b%x == 0)
			{
				y = x;
				printf_s("最大公约数是%d。\n", y);
				return 0;
			}
		}
	}
	
	return 0;
}


//主函数
int main()
{
	int select = 1;
	int i;
	while (select)
	{
		printf_s("请输入两个数(并以英文逗号隔开):");
		scanf_s("%d,%d", &m, &n);
		printf_s("\n");
		printf_s("              *********************************************************\n");
		printf_s("              #                                                       #\n");
		printf_s("              #               求两数最大公约数                        #\n");
		printf_s("              #                                                       #\n");
		printf_s("              *********************************************************\n");
		printf_s("              #                                                       #\n");
		printf_s("              #       0.辗转相除法          1.相减法                  #\n");
		printf_s("              #                                                       #\n");
		printf_s("              #       2.穷举法              3.退出系统                #\n");
		printf_s("              #                                                       #\n");
		printf_s("              *********************************************************\n");
		printf_s("\n");
		printf_s("                    请选择您需要的操作序号(0-3)按回车确认:");
		scanf_s("%d", &i);
		printf_s("\n");
		switch (i)
		{
		case 0:
			div();
			break;
		case 1:
			sub();
			break;
		case 2:
			exh();
			break;
		case 3:
			select = 0;
			break;
		default:
			printf_s("请在0-3之间选择\n");
			break;
		}
	}
	return 0;
}
最终效果图:



猜你喜欢

转载自blog.csdn.net/jacoox/article/details/64922011