解题思路以及注意事项:
小方是自己定义了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分
109 人评分
#include<stdio.h> int main() { int n=100,n1,n2,n3; for (; n < 999;) { n = n + 1, n1 = n / 100, n2 = (n - n1 * 100) / 10, n3 = n - n1 * 100 - n2 * 10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==n) printf("%d\n", n); } return 0; }
这改成这个好点吧。 int gcd(int a,int b){ if(a%b == 0){ return b; } else{ return gcd(b,a%b); } }
念之森蓝 2020-05-01 12:26:43 |
感觉是更好一点
20物联网3班刘帅甫 2020-11-28 23:32:05 |
你这个更好,但就是不美观,身为强迫症的我好想让它变整齐
#include<bits/stdc++.h> using namespace std; int gcd(int a,int b) { if(a%b==0) return b; else; return gcd(b,a%b); } int main() { int a,b,t; cin>>a>>b; t=gcd(a,b); printf("%d %d",t,a*b/t); return 0; } 这样似乎更简洁更清楚吧
#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; } 能帮我看看为什么我的这个不行吗
LuLD 2020-09-09 16:19:41 |
while(i!=0){ max=min; min=i; i=max%min; } 这句之后 max = 30;min = 6;n = max % min =0 呀,0不能是除数,所以报错
#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); }
chengyuyi 2019-12-26 17:01:42 |
写错了
chengyuyi 2019-12-26 17:03:50 |
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); }咋还是答案错误
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:846 |
C语言训练-计算1~N之间所有奇数之和 (C语言代码)浏览:644 |
WU-C语言程序设计教程(第三版)课后习题11.12 (C++代码)(想学链表的小伙伴可以看看)浏览:898 |
1113题解浏览:784 |
矩形面积交 (C语言代码)浏览:1293 |
输出九九乘法表 (C语言代码)浏览:1048 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:546 |
汽水瓶 (C语言代码)浏览:530 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:676 |
C二级辅导-等差数列 (C语言代码)浏览:770 |
TTSV 2020-04-09 12:52:05 |
#include<stdio.h> int main() { int a, b, c, d; scanf("%d%d", &a, &b); d = b; if (a < b) b = a ,a = d,d=b; if (a % b == 0); else for (c=b; a % b != 0||c % b != 0; b = b - 1); printf("%d %d",b,a*d/b); return 0; }