鱼C论坛

 找回密码
 立即注册
查看: 2747|回复: 4

求最大公约数

[复制链接]
发表于 2012-3-9 14:25:45 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 秋舞斜阳 于 2012-3-9 14:26 编辑
  1. //输入两个正整数m和n,求其最大公约数和最小倍数。

  2. #include <stdio.h>

  3. int main()
  4. {
  5. int p, r, n, m, temp;
  6. printf("请输入两个正整数:\n");
  7. if(n < m)
  8. {
  9. temp = n;
  10. n = m;
  11. m = temp;
  12. }
  13. p = n * m;
  14. while(m != 0)
  15. {
  16. r = n%m;
  17. n = m;
  18. m = r;
  19. }
  20. printf("它们的最大公约数为:%d\n", n);
  21. printf("它们的最小公约数为: %d\n", p/n);

  22. return 0;
  23. }
复制代码

这段代码我看不懂。请各位解释指点下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-9 14:25:46 | 显示全部楼层
  1. //输入两个正整数m和n,求其最大公约数和最小倍数。

  2. #include <stdio.h>

  3. int main()
  4. {
  5.         int p, r, n, m, temp;        //n, m是你输入的数就不用说了
  6.                                                         //p用来表示n,m的乘积;
  7.                                                         //r是表示n,m的余数
  8.                                                         //temp只是一个临时的变量。用于两个数对换的中间变量
  9.         printf("请输入两个正整数:\n");   
  10.         scanf("%d%d",&m,&n);      //你的这行程序少了用户输入2个数的操作

  11.         if(n < m)                //这里把打的数赋值给了n,意思说如果n<m,那么交换n,m的值。
  12.         {
  13.                 temp = n;
  14.                 n = m;
  15.                 m = temp;
  16.         }
  17.         p = n * m;

  18.         //下面这段程序是主要的,整个程序的关键
  19.         //
  20.         while(m != 0)//如果m等于0,说明余数为零了。余数为零那说明n能被m整除。因为下面有个把余数赋值给m(m = r)
  21.         {
  22.                 r = n%m;//求余操作.
  23.                 n = m;
  24.                 m = r;
  25.         }

  26.         printf("它们的最大公约数为:%d\n", n);
  27.         printf("它们的最小公倍数为: %d\n", p/n);
  28.        
  29.         return 0;
  30. }
复制代码

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 15:10:29 | 显示全部楼层
//输入两个正整数m和n,求其最大公约数和最小倍数。
#include <stdio.h>
int main()
{
        int p, r, n, m, temp,k;
        printf("请输入两个正整数:\n");
        scanf("%d,%d",&m,&n);      //用户输入两个数
        if(n < m)               
        {               
                temp = n;               
                n = m;               
                m = temp;       
        }                 //n大m小       
       
        k=m*n;
       
        //p = n * m;
         p=1;              //确保进入循环
        //while(m != 0)
        while(p!=0)     //采用辗转相除法
        {               
                //r = n%m;                            
                p=n%m;
            r=m;        //保存m的值,因为m很可能为最大公约数
                n = m;               
                m = p;      //交换m n使n大m小               
        }
        k=k/r;
        //printf("它们的最大公约数为:%d\n", n);
        printf("它们的最大公约数为:%d\n", r);       
        printf("它们的最小公倍数为: %d\n", k);       
        return 0;       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-9 20:31:17 | 显示全部楼层

谢谢您。您说得很详细。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 23:08:22 | 显示全部楼层
秋舞斜阳 发表于 2012-3-9 20:31
谢谢您。您说得很详细。

有问题,最重要的那个辗转相除我截了一张图片。居然没显示。你百度去了解一下辗转相除。记住这个就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-26 14:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表