400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

【C语言】:输入两个正整数并找出它们的最大公约数-创新互联

*********************************************************************************

创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、成都网站设计、成都做网站、网站优化、软件开发、网站改版等服务,在成都十载的网站建设设计经验,为成都近千家中小型企业策划设计了网站。

导言:本人也是一位小白,有错误的地方请各位大佬指出,我便修改,这是我的第一篇博客写得不好请见谅。

下面介绍两种方法->

*********************************************************************************

    • 减一比较法(当然这是我自己命名的hhh~)

代码如下:

#include#include//system("pause");的头文件

 int main ()
{
    int i = 0, j = 0;
    int temp = 0;
    printf("请输入两个正整数:>");
    scanf("%d,%d",&i,&j);
        if(i >j)
    {
        temp = j;
    }
        else
    {
        temp = i;
    }

        for(temp; temp>0; temp--)
    {
        if(((i % temp) == 0) && ((j % temp) ==0))
        {
            printf("大公约数是:%d\n",temp);
            break;
        }
    }
    system("pause");//卡住生成的窗口方便观察结果
    return 0;
}

此方法的原理:将输入的两个数中较小的一个数给到一个中间变量用作for循环,以此来自减,在减的过程中会把这个数拿给输入时的两个数进行取余运算,若输入时的数均取余得到0就说明此时的中间变量的值就是输入的两个数的大公约数。(因为较小的那个数自减的话比较大的那个数提高了效率,大公约数顾名思义是输入两个正整数均所能整除的大数)

当然这样的代码很是繁琐,看起来一大堆,所以为大家准备了第二种方法。

第二种方法也是大家上学时学过的“欧几里得算法”也就是辗转相除法,这属于算法的一种了。

先解释一下原理吧:

前面说到”减一法“的代码比较繁琐而这里却更繁琐,这里时为了大家更好的理解,下面会有优化的代码的,请各位看官稍安勿躁哦!

代码如下:

#include#include//system("pause");的头文件

 int main ()
{
    int i = 0, j = 0;
    int min = 0;
    int max =0;
    printf("请输入两个正整数:>");
    scanf("%d,%d",&i,&j);
    if(i >j)
    {
        min = j;
        max = i;
    }
    else
    {
        min = i;
        max = j;
    }
    while(1)
    {
        if((max % min) == 0)
        {
            printf("大公约数是:>%d\n",min);
            break;
        }
        else
        {
            int num = min;
            min = max % min;
            max = num;
        }
    }
    system("pause");//卡住生成的窗口方便观察结果
    return 0;
}

既然说到了可以不论顺序,所以我们吧这算法优化一下

#include#include//system("pause");的头文件

 int main ()
{
    int i = 0, j = 0;
    int num =0;
    printf("请输入两个正整数:>");
    scanf("%d,%d",&i,&j);
    while(num=(i%j))
    {
        i = j;
        j = num;
    }
    printf("大公约数是:%d\n",j);
    system("pause");//卡住生成的窗口方便观察结果
    return 0;
}

这里就很简洁啦,相信大家也理解得差不多了吧!!!

我把代码运行输出一下吧!

最后希望大家指出我的问题!

谢谢各位看官的光临,点点赞吧!!!

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:【C语言】:输入两个正整数并找出它们的最大公约数-创新互联
转载源于:http://mbwzsj.com/article/gcgjg.html

其他资讯

让你的专属顾问为你服务