[原]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;
}

最终效果图:

效果图1

效果图2

效果图3

文章作者: JaCo Wu
文章链接: https://jacokwu.cn/blog/2017/03/22/原-c语言求两个数的最大公约数/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JaCo Wu的博客