C 语言范例 - 求两数的最大公约数

用户输入两个数,求这两个数的最大公约数。

使用 for 和 if

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 */

#include <stdio.h>

int main()
{
    int n1, n2, i, gcd;

    printf("输入两个正整数,以空格分隔: ");
    scanf("%d %d", &n1, &n2);

    for(i=1; i <= n1 && i <= n2; ++i)
    {
        // 判断 i 是否为最大公约数
        if(n1 % i == 0 && n2 % i == 0 )
            gcd = i;
    }

    printf("%d 和 %d 的最大公约数是 %d\n", n1, n2, gcd);

    return 0;
}

编译运行范例,输出结果如下

$ gcc main.c && ./a.out
输入两个正整数,以空格分隔: 88 64
8864 的最大公约数是 8

使用 while 和 if

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 */


#include <stdio.h>


int main()
{
    int n1, n2;

    printf("输入两个数,以空格分隔: ");
    scanf("%d %d",&n1,&n2);

    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d\n",n1);

    return 0;
}

编译运行范例,输出结果如下

$ gcc main.c && ./a.out
输入两个数,以空格分隔: 88 64
GCD = 8

适用正数和负数

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 */


#include <stdio.h>

int main()
{
    int n1, n2;

    printf("输入两个数,以空格分隔: ");
    scanf("%d %d",&n1,&n2);

    // 如果输入的是负数,将其转换为正数
    n1 = ( n1 > 0) ? n1 : -n1;
    n2 = ( n2 > 0) ? n2 : -n2;

    while(n1!=n2)
    {
        if(n1 > n2)
            n1 -= n2;
        else
            n2 -= n1;
    }
    printf("GCD = %d\n",n1);

    return 0;
}

编译运行范例,输出结果如下

$ gcc main.c && ./a.out
输入两个数,以空格分隔: 64 88
GCD = 8

使用递归

/**
 * file: main.c
 * author: 简单教程(www.twle.cn)
 */


#include <stdio.h>

int hcf(int n1, int n2);

int main()
{
   int n1, n2;
   printf("输入两个数,以空格分隔:");
   scanf("%d %d", &n1, &n2);

   printf("%d 和 %d 的最大公约数为 %d\n", n1, n2, hcf(n1,n2));
   return 0;
}

int hcf(int n1, int n2)
{
    if (n2 != 0)
       return hcf(n2, n1%n2);
    else 
       return n1;
}

编译运行范例,输出结果如下

$ gcc main.c && ./a.out
输入两个数,以空格分隔:88 64
8864 的最大公约数为 8

C 语言范例

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.