| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 650 人关注过本帖
标题:求最大公约数和最小公倍数时while和if的区别
只看楼主 加入收藏
美美学c
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2023-9-9
结帖率:87.5%
收藏
已结贴  问题点数:15 回复次数:1 
求最大公约数和最小公倍数时while和if的区别
#include <stdio.h>

int main()
{int gys(int m,int n);
int gbs(int m,int n);
int x,y;
scanf("%d,%d",&x,&y);
printf("%d,%d",gys(x,y),gbs(x,y));

}
int gys(int m,int n)
{int t,d;
if(m<n)
{d=m;
m=n;
n=d;
}
while(m%n)//当此处为if(m%n)其他公约数可得出而输入15,9时得到最大公约数得6改为while才可以?这是为什么啊
{t=m%n;
m=n;
n=t;
}
return (n);
}
int gbs(int m,int n)
{return(m*n/gys(m,n));
}
搜索更多相关主题的帖子: int while 最大公约数 求和 if 
2023-10-20 20:24
沈和
Rank: 4
等 级:业余侠客
威 望:5
帖 子:45
专家分:214
注 册:2019-8-26
收藏
得分:15 
程序代码:
while(m % n)
{
  t = m % n;
  m = n;
  n = t;
}


这一段的核心是辗转相除法。辗转相除法需要多次迭代才能得出结果。
使用 if 的时候,执行一次就结束了。使用 while 就符合辗转相除法的原理。

m = 15, n = 9
第 1 次迭代:
    循环条件 15 % 9 = 6
    循环体内计算 n = 6, m = 9

第 2 次迭代:
    循环条件 9 % 6 = 3
    循环体内计算 n = 3, m = 6

第 3 次迭代:
    循环条件 6 % 3 = 0 结束迭代

要学会调试,在程序执行过程中,查看数据的变化。这样能学得更明白一些。
2023-10-20 20:42
快速回复:求最大公约数和最小公倍数时while和if的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026192 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved