C语言求任意两个整数的最大公约数(历年考过一次)

本文介绍了如何使用C语言求解任意两个整数的最大公约数,重点讲解了辗转相除法,并提供了相关历年考试真题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:求任意两个整数的最大公约数

接下来咱们就直接上代码!

法一:普通方法

//直接上代码:  
    #include<stdio.h>
    int main()
    {
       int m,n,temp,i;   //分别定义 两个整数n、m, 临时变量temp,循环变量i
       printf("请分别输入m和n的值:\n");
       scanf("%d,%d",&m,&n);
       if(m < n)  //比较大小
       {      //实现 m与n 之间值的交换,  实现 m > n
           temp = m;
           m = n;
           n = temp;
       } 
       for(i=n; i>0; i--)   // 循环变量 i 从 m与n之间较小的数开始 (因为两者间的最大公约数可能是 较小的那个数, 例如:600%30,那么最大公约数为30)
       {                        
           if( m%i == 0 && n%i == 0 )
           {
               printf("%d和%d的最大公约数为%d\n",m,n,i);
               break;
           }
       }
       return 0;
}


//例如:  
     输入 :  m=5,n=8
     通过if 转换  得到  m=8,n=5

     然后循环变量 i = 5 (两者之间  较小的那个数)    //这时已经满足: 不大于两者
     然后进行:第二个if
             if(8 % (5~1) ==0 && 5 % (5~1) == 0)    => 筛选出 能"同时整除" 两整数的自然数 
    最后  输出  最大公约数  i = 1

法二:采用"辗转相除法"  ♥♥♥♥♥  :

(2).采用"辗转相除法"  ♥♥♥♥♥  :
           ① 输入数据 (可有可无,具体看题目)
           
           ② 比较大小 (由于"辗转相除法"是 不断通过"余数"来作为"除数"的,所以一定是 "大➗小")
            切记  为了防止 "被除数" < "除数"  要设置相应的代码处理 (不同题型的处理方式不一样)

            ③辗转相除  求"最大公约数"

        例如: 求1997和615的最大公约数:
            1997 % 615 = 152
             615 % 152 = 7
              152 % 7 = 5
               7 % 5 = 2
                5 % 2 = 1
                 2 % 1 = 0  (直到 x % y = 0  才结束!!!)
            所以 1997 和 615 的最大公约数为 " 1 "。
        
        注意:  使用"辗转相除法" 记得  将 '%' , '/' 区分开。
            
            %:求余     较小的数 % 较大的数 = 较小的数'本身'     例:  5%6 = 5
            /:除      较小的数 / 较大的数 = 0          例: 5/6 = 0
            

//上代码:
#include<stdio.h>
int main()
{
    int m,n,temp;
    printf("请输入m和n的值:\n");
    scanf("%d,%d",&m,&n);
    while( (temp = m%n)!=0 )   //其实就是筛选出 m < n 的值
    {
        m = n;         //如果 m < n 那么就把 n的值赋值给m   从而保证 m > n
        n = temp;    //然后将 temp, 也就是较小的那个数 赋值给 n (这边解释一下 temp = (m%n! =0) ,其实就是 temp = 两者之间较小的那个数 )
    }                                 
    printf("m和n的最大公约数为%d\n",n);   //如果 m%n !=0 则一直执行 while(  ) ,直到最后不满足while()得条件  跳出循环,得到"最大公约数"
    return 0;
}

例如:
666 % 23 = 22
  23 % 22 = 1 
   22 % 1 =0
所以666与23的"最大公约数"为: 1

真题演练: 2013-2021 考了1次!!!

"2017.42"
题目:函数int Gcd(int m,int n)的功能是返回整数m和n的最大公约数。例如:输入m=36,n=48,返回值为:12,请填空完成程序。

#include<stdio.h>
int Gcd(int m,int n)
{
if( m % n == 0 )    考点!!!   
//这边有个   误区,切记   '%'与'/' 的区别哦!    
    {                    //  5%6 = 5 ,    5/6 = 0
        return n;           //较小的数 % 较大的数 = 较小数的本身
    }                        //较小的数 / 较大的数 = 0
    else
    {
        return Gcd( n,m%n );   考点!!!    //m%n  =>   36 % 48 =36
    }    //可以推出  变成   n % (m%n)   =>  48 % 36 =12
}
int main()
{

    printf("The greatest common divisor is: %d\n",Gcd(36,48));
}           

💖 喜欢我的文章,记得点赞👍+评论💬+收藏⭐️+关注😙の,你的反馈就是我不断更新的动力!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值