Mister-小方


私信TA

用户名:1104986125

访问量:119945

签 名:

如此英俊为哪般

等  级
排  名 4
经  验 19883
参赛次数 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分

37 人评分

  评论区

#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;
}
2020-04-09 09:47:54 | |
这改成这个好点吧。
int gcd(int a,int b){
	if(a%b == 0){
		return b;
	}
	else{
		return gcd(b,a%b);
	}
}
2020-03-31 13:52:49 | |
#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;
}
这样似乎更简洁更清楚吧
2020-03-02 23:48:13 | |
#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;
   
}能帮我看看哪里出问题了吗?
2020-02-22 23:29:26 | |
#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;
}
2020-02-15 21:23:29 | |
//输入两个正整数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;
}
2020-02-15 16:03:02 | |
#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;
}
能帮我看看为什么我的这个不行吗
2020-02-04 14:51:27 | |
#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);
}
2019-12-26 16:48:16 | |