Mister-小方


私信TA

用户名:1104986125

访问量:248269

签 名:

如此英俊为哪般

等  级
排  名 4
经  验 36961
参赛次数 1
文章发表 68
年  龄 19
在职情况 学生
学  校 大连交通大学
专  业 车辆工程

  自我简介:

解题思路以及注意事项:
1.   小方是自己定义了gcd()函数来求最大公因数(最大公因数就是像12和18的最大公因数是6,两数除它都是整除)。

2.   gcd()函数用到了函数的递归调用,可能相对有点难想,但这个理解了可以背下来。
3.   gcd()的原理我们用个例子来说明,12和18。18-12=6 12-6=6 6=6 所以6就是最大公因数。
4.   利用最大公因数和最小公倍数(能够同时被两个数整除的数 如12 18的最小公倍数是36)的关系来求最小公倍数 :最大公 因数X最小公倍数=两数值积,如6X36=18X12。
5.   定义lcm()函数来求最小公倍数,相信大家利用上面的公式可以理解。
6.   函数声明别忘了。

    其实这题前面就为大家讲解过了。应该没什么问题了。
实例代码:

#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分

8 人评分

  评论区

#include <stdio.h> 

int gcd(int x, int y);
int lcm(int x, int y);

int main()
{
	int a,b;
	
	while (1)
	{
		scanf("%d%d", &a, &b);
		printf("%d %d\n", gcd(a, b), lcm(a, b));
	}
	
	return 0;	
}

int gcd(int x, int y)
{
	int temp,m,n;
	m = (x > y) ? x : y;
	n = (x < y) ? x : y;	

	while(m % n != 0)
	{
		temp = m % n;
		m = n;
		n = temp;	
	}
	return n;
}

int lcm(int x, int y)
{
	int c,m,n;
	m = (x > y) ? x : y;
	n = (x < y) ? x : y;
	if(m == 0)
	{
		c = m;
	}
	else
	{
		c = m * n / gcd(x, y);
	}
	return c;
}
2019-04-18 15:20:56
求助大神,帮忙看看哪里错了
#include<stdio.h>
int fun(int a,int b)
{
	int c;
	int x;
	scanf("%d%d,&a,&b");
	x=a*b;
	if(a<b)
	{
		c=a;
		a=b;
		b=c;
		while(a%b != 0)
		{
			c=a;
			a=b;
			b=c%b;
		}
		printf("%d %d\n",b,x/b);
	}
	
	return 0;
}
int main()
{
	fun(a,b);
	return 0;
}
2019-03-21 10:48:46
不知道哪里错误,求指点
#include <iostream>
using namespace std;
int MaxY(int m,int n)
{
	int num;
	for(num=m>n?m:n; num>=1; num--)  //穷举最大公约数 最大公约数肯定小于m,n的最大值:范围[m?n>m:n ~ 1] 
	{
		if(m%num==0&&n%num==0)       //最大公约数当然能被m,n都整除 
			return num;
	}
	return 1;
}
int MinB(int m,int n)
{
	int num;
	num=m*n/MaxY(m,n); //最小公倍数等于两数的乘积除以最大公约数 
}

int main()
{
	int M,N;
	cin>>M>>N;
	cout<<MaxY(M,N)<<" "<<MinB(M,N); 
	return 0;
}
2018-12-19 21:36:26
求讲解15行递归调用
2018-10-11 19:53:46
你好,最大公约数的递归前,不用判断大的在前小的在后吗?
2018-07-10 09:50:19
为什么你这里不用判定大小再进行模运算?
2018-06-05 21:11:02
哪个都不懂
2018-06-05 16:58:41
#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;
    else return(b,a%b);
}
int lcm(int a,int b)
{
    return a/gcd(a,b)*b;
}
我哪里跟你不一样。。。。
2017-09-03 11:11:44
  • «
  • 1
  • »