C 语言教程 在线

1710c-exercise-example16

参考方法:

#include<stdio.h>
int gcd(int m,int n);
int min(int m,int n,int g);
int main(void)
{
    int m,n,g1,g2;
    printf("请输入两个数字:\n");
    scanf("%d%d",&m,&n);
    g1 = gcd(m,n);
    g2 = min(m,n,g1);
    printf("这两个数的最大公约数是%d,最小公倍数是%d",g1,g2);
    return 0;
}

int gcd(int m,int n)
{
    int r;
    while(n!=0)
    {
        r = m % n;
        m = n;
        n = r;
    }
    return m;
}

int min(int m,int n,int g)
{
    return m*n/g;
}

1709c-exercise-example16

参考方法:

#include<stdio.h> 

int gcd(int a,int b) //求最大公约数的函数
{
   int x;
   while(a%b!=0)
   {
       x=a%b;
       a=b;
       b=x;
    }
    return b;    
}
int ext(int *a,int *b) //交换算法
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
    return 0;
}

int main()
{
    int a,b,c,min_g,max_g;
    printf("请输入两个不相等的正整数:");
    scanf("%d %d",&a,&b) ;
    if(a<b)    
    ext(&a,&b);
    /*{
        c=a;
        a=b;
        b=c;
    }
    printf("%d %d\n",a,b);*/
    min_g=gcd(a,b);
    max_g=a*b/min_g;
    printf("%d和%d的最大公约数为:%d\n",a,b,min_g);
    printf("%d和%d的最小公倍数为:%d\n",a,b,max_g);
    return 0;
}

1708c-exercise-example16

参考代码:

写的不好看,但思路还是比较清晰的,暂时也没出现bug

#include<stdio.h>
void f14(int m,int n){
    int i=0;
    int num=1;
    int temp1=m,temp2=n;//用两个变量寄存m,n的值
    int min=m<n?m:n;//求得m,n中的较小值

    for(i=2;i<=min;i++){
        if((m%i==0)&&(n%i==0)){
            //printf("%d\n",i);
            num*=i;
            m=m/i;
            n=n/i;
            min=min/i;
            i=1;//i的还原,不然在执行一次循环体后,i++=3,下次循环时,会将i=2这个商给跳过,出现问题
            //printf("%d\n",min);
        }
    }
    printf("最大公约数为:%d\n",num);
    printf("最小公倍数为:%d\n",temp1*temp2/num);
}
int main(){
        printf("请输入两个数:");
    int m,n;
    scanf(" %d %d",&m,&n);
    f14(m,n);
        return 0;
}

1707c-exercise-example16

参考方法:

#include<stdio.h>

int main()
{
    int i, j;
    int m = 0;
    int s;
    printf("请输入两个数字:\n");
    scanf("%d %d", &i, &j);
    m = i < j ? i : j;
    for (s = m; s >= 1; s--) {
        if (i%s == 0 && j%s == 0)
        {
            printf("最大公约数=%d\n",s);
            printf("最小公倍数=%d\n",i*j/s);
            break;
        }
    }
    return 0;
}

1706c-exercise-example16

最大公约数参考方法:

#include<stdio.h>

int main(void)
{
    int m,n,x,maxx,minx,z;
    printf("输入2个正整数:");
    scanf("%d%d",&m,&n);
    z=m>n?n:m;
    for(x=2;x<=z;x++)
        if(m%x==0&&n%x==0)
            maxx=x;
    printf("%d\n",maxx);
    minx=m*n/maxx;
    printf("%d",minx);
    return 0;
}