基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
求3个正整数的最大公约数和最小公倍数。
第一种:辗转相除法
#include<stdio.h>
//#include<stdlib.h>
int main()
{
int n = 0;
int m = 0;
int temp = 0;
int l = 0;
printf("请输入两个整数:\n");
scanf("%d %d", &n, &m);
l = n * m;
if (n < m)//找到最大的数
{
temp = n;
n =m;
m = temp;
}
while (n %m != 0)//辗转相除
{
temp = m;
m = n % m;
n = temp;
}
printf("最大公约数:%d\n",m);
printf("最小公倍数:%d\n", l/m);
return 0;
}
结果截屏:
调试截屏:
算法设计图:
第二种:穷举法
#include<stdio.h>
void main()
{
int temp=0,n,m;
int t;
printf("请输入两个整数:\n");
scanf("%d %d",&n,&m);
if(n<m){ //判断n,m的大小
t = n;
n= m;
m= t;
}
for(temp=m;;temp--){ //用穷举法求最大公约数
if(n%temp==0&&m%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;
}
算法设计图:
结果截屏:
调试截屏: