//*********求两个正整数的最大公约数问题***********
//作者:高双
//版本:v1.0
//创建时间:2017年3月17日
//主要功能:
//(1)辗转相除法: ① a%b得余数c
// ② 若c=0,则b即为两数的最大公约数,结束
// ③ 若c≠0,则a=b,b=c,再回去执行①
//(2)相减法 :两整数a和b:
// ① 若a>b,则a=a-b
// ② 若a=b,则a(或b)即为两数的最大公约数,结束
// ③若a≠b,则再回去执行①
//(3)穷举法:
// ① i= a b中的小数
// ② 若a,b能同时被i整除,则i即为最大公约数,结束
// ③ i--,再回去执行②
//
//************************************
#include<stdio.h>
int main()
{
int a,b,h=1;
int divisor1 (int a,int b); //函数声明
int divisor2 (int a,int b);
int divisor3 (int a,int b);
int judge(int a,int b);
int x,y,z;
while(h==1)//循环
{
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
if(judge(a,b)==0)//判断输入数据的正确性
{
printf("请输入正确的两个整数\n");
}
else
{
x=divisor1 ( a, b);//调用函数
y=divisor2 ( a, b);
z=divisor3 ( a, b);
printf("辗转相除法求得的最大公因数:%d\n",x);
printf("相减法求得的最大公因数:%d\n",y);
printf("穷举法求得的最大公因数:%d\n",z);
printf("1.下一组数据 2.退出\n");
scanf("%d",&h);
}
}
return 0;
}
//判断输入整数的正确性
int judge(int a,int b)
{
if(a>0&&b>0) //a与b都为大于0的整数
return 1;
else
return 0;
}
//辗转相除法求两数的最大公约数
int divisor1 (int a,int b)
{
int temp; //定义整型临时变量
if(a<b) //通过比较求出两个数中的最大值和最小值
{
temp=a;
a=b;
b=temp;
}
while(b!=0) //通过循环求两数的余数,直到余数为0
{
temp=a%b;
a=b; //变量数值交换
b=temp;
}
return a; //返回最大公约数到调用函数处
}
//相减法求两数的最大公约数
int divisor2 (int a,int b)
{
int temp; //定义整型临时变量
while(a!=b) //通过循环求两数的差,直到减数等于差
{
if(a>b)
a=a-b;
else
{
if(a<b) //通过比较把较大数赋给a
{
temp=a;
a=b;
b=temp;
}
a=a-b;
}
}
return a; //返回最大公约数到调用函数处
}
//穷举法求两数的最大公约数
int divisor3 (int a,int b)
{
int temp; //定义整型临时变量
if(a>b) //通过比较求出两个数中的最大值和最小值
{
temp=a;
a=b;
b=temp;
}
for(int i=a;i>0;i--)
if(a%i==0&&a&&b%i==0) //若a,b能同时被i整除,则i即为最大公约数
break;
return i; //返回最大公约数到调用函数处
}
求两个正整数的最大公约数
最新推荐文章于 2021-05-30 14:26:00 发布