C语言 如何求两整数的最大公约数与最小公倍数
目录
- 题目
- 思路
- 代码
- 法一
- 法二(局部变量)
- 法三(全局变量)
- 运行结果
题目
用一函数求最大公约数,用另一函数调用此函数求出最大公约数,并用求出的最大公约数求最小公倍数。
具体要求如下:
- ①用全局变量。将最大公约数与最小公倍数设为全局变量,在主函数中输出它们的值。
- ②不用全局变量。最大公约数和最小公倍数由被调模块返回值。
思路
从两个数中选一个数,从这个数开始,逐步减一,当能够同时被两个数整除时,结束循环,即为最大公约数。
最小公倍数*最大公约数=两个数乘积。
代码
法一
#include<stdio.h>
int main()
{
int x,y,z,a,b,c,d,t,x_0,y_0;
printf("请输入两个整数:");
scanf("%d,%d",&x,&y);
x_0=x;y_0=y;
if(x<y) t=x,x=y,y=t;
do
{
a=x%y;
if(a!=0) x=y,y=a,a=x%y;
}while(x%y!=0);
printf("这两个整数的最大公约数为:%d\n",y);
c=x_0/y;d=y_0/y;
z=y*c*d;
printf("这两个整数的最小公倍数为:%d\n",z);
return 0;
}
法二(局部变量)
#include<stdio.h>
int yue(int a,int b)
{
int i,s,max_yue;
for(i=a;i>0;i--)
if(a%i==0&&b%i==0) {max_yue=i;break;}
return(max_yue);
}
int bei(int a,int b)
{
int yue(int a,int b);
int max_bei;
max_bei=a*b/yue(a,b);
return(max_bei);
}
int main()
{
int a,b,t,max_yue,max_bei;
int yue(int a,int b);
int bei(int a,int b);
printf("请输入两个正整数:");
scanf("%d,%d",&a,&b);
if(a<b) {t=a;a=b;b=t;}
max_yue=yue(a,b);
max_bei=bei(a,b);
printf("这两个数最大公约数为:%d\n最小公倍数为:%d\n",max_yue,max_bei);
}
法三(全局变量)
#include<stdio.h>
int max_yue,max_bei;
int yue(int a,int b)
{
int i;
for(i=a;i>0;i--)
if(a%i==0&&b%i==0) {max_yue=i;break;}
return(max_yue);
}
int bei(int a,int b)
{
int yue(int a,int b);
max_bei=a*b/yue(a,b);
return(max_bei);
}
int main()
{
int a,b,t;
int yue(int a,int b);
int bei(int a,int b);
printf("请输入两个正整数:");
scanf("%d,%d",&a,&b);
if(a<b) {t=a;a=b;b=t;}
max_yue=yue(a,b);
max_bei=bei(a,b);
printf("这两个数最大公约数为:%d\n最小公倍数为:%d\n",max_yue,max_bei);
}
运行结果

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
赞 (0)
