题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
一、辗转相除法
源代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int max = 0;
int min = 0;
int temp = 0;
int mul = 0;
printf("Please enter two num:\n");
scanf("%d %d", &max, &min);
mul = max * min;
if (max < min)//找到最大的数
{
temp = max;
max = min;
min = temp;
}
while (max % min != 0)//辗转相除
{
temp = min;
min = max % min;
max = temp;
}
printf("最大公约数:%d\n", min);
printf("最小公倍数:%d\n", mul/min);
system("pause");
return 0;
}
流程图:
调试图:
测试图:
二、穷举法
源代码:
#include<stdio.h>
void main()
{
int temp=0,a,b;
printf("请输入要求最大公约数的两个数:\n");
scanf("%d %d",&a,&b);
if(a<b){ //保证a>b
a=a^b; //用异或法交换a,b的值
b=a^b;
a=a^b;
}
for(temp=b;;temp--){ //用穷举法求最大公约数
if(a%temp==0&&b%temp==0)
break;
}
printf("最大公约数为:%d\n",temp);
}
流程图:
调试:
测试:
三、辗转相减法
源代码:
#include <stdio.h>
int main()
{
int a,b;
printf("请输入要求最大公约数的两个数:\n");
scanf("%d %d",&a,&b);
while(a!=b)
{
if(a>b)
{
a = a - b;
}
else
b = b - a;
}
printf("最大公约数为:%d\n",a);
return 0;
}
流程图:
调试:
测试: