原题链接:[编程入门]最大公约数与最小公倍数
解题思路以及注意事项:
小方是自己定义了gcd()函数来求最大公因数(最大公因数就是像12和18的最大公因数是6,两数除它都是整除)。
gcd()函数用到了函数的递归调用,可能相对有点难想,但这个理解了可以背下来。
gcd()的原理我们用个例子来说明,12和18。18-12=6 12-6=6 6=6 所以6就是最大公因数。
利用最大公因数和最小公倍数(能够同时被两个数整除的数 如12 18的最小公倍数是36)的关系来求最小公倍数 :最大公因数X最小公倍数=两数值积,如6X36=18X12。
定义lcm()函数来求最小公倍数,相信大家利用上面的公式可以理解。
函数声明别忘了。
实例代码:
#include"stdio.h"
int gcd(int a,int b);//函数声明
int lcm(int a,int b);//函数声明
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",gcd(a,b),lcm(a,b));
return 0;
}
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);//递归调用
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;//利用公式
}看看大家还有什么不懂的,请在下方的评论区留言
0.0分
79 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int main() { int m ,n ,max,min,i,t; scanf("%d%d",&m,&n); for(i=m*n;i>=m;i--) { if(i%m==0&&i%n==0); min=i; } printf("%d",min); for(t=1;t<=m;t++) { if(n%t==0&&m%t==0) max=t; } printf("%d",max); return 0; }能帮我看看哪里出问题了吗?#include<stdio.h> int main() { int a,b,c=1,t,m; scanf("%d %d",&a,&b); int i; for(i=2;i<a+1&&i<b+1;i++) { if(a%i==0&&b%i==0) c=i; } t=c>=1?c:1; m=a*b/t; printf("%d %d",t,m); return 0; }//输入两个正整数a和b,求其最大公约数和最小公倍数。 #include <stdio.h> int main() { int f1(int x, int y); int f2(int p, int q, int z); int a = 0, b = 0; scanf("%d %d", &a, &b); int m = a > b ? a : b, n = a > b ? b : a; printf("%d ", f1(m, n)); printf("%d", f2(m, n, f1(m, n))); } int f1(int x, int y) { int alter; while (x % y != 0) { alter = x % y; x = y; y = alter; } return y; } int f2(int p,int q,int z) { return p * q / z; }#include<stdio.h> int main() { int a,b,max,min,i; int m,n; scanf("%d %d",&a,&b); if(a>b){ max=a,min=b; }else{ max=b,min=a; } i=max%min; while(i!=0){ max=min; min=i; i=max%min; } n=max%min; m=a*b/n; printf("%d %d",n,m); return 0; } 能帮我看看为什么我的这个不行吗@chengyuyi int main() /* 辗转相除法求最大公约数 */ { int m, n, a, b, c,x,y,e,f; scanf("%d%d", &a, &b); m=a; n=b; if(a>b) { x=a;y=b;} else {x=b;y=a;} while(y!=0) /* 余数不为0,继续相除,直到余数为0 */ { c=x%y; x=y; y=c;} printf("The largest common divisor:%d ", x); printf("The least common multiple:%d ", m*n/x); }咋还是答案错误#include"stdio.h" int main() /* 辗转相除法求最大公约数 */ { int m, n, a, b, c,x,y; scanf("%d%d", &a, &b); m=x; n=y; if(a>b) { x=a;y=b;} else {x=b;y=a;} while(y!=0) /* 余数不为0,继续相除,直到余数为0 */ { c=x%y; x=y; y=c;} printf("The largest common divisor:%d\n", x); printf("The least common multiple:%d\n", m*n/x); }# include <stdio.h> int main (void) { int a ,b ; int i ,t, x ,y ; printf ("输入两个值a、b,中间用空格隔开,将会输出这两个数的最大公约数和最小公倍数:"); scanf("%d %d",&a ,&b); if (a<b) t = a; else t = b ; for (i=1;i<=t;++i) { if( (a%i == 0) && (b%i ==0 ) ) x=i ; } y =(a/x)*(b/x)*x ; printf("%d\n",x); printf ("%d\n",y) ; return 0 ; } 我看不懂 呢些函数 还没学到 我觉得我这个也 可以