#include<stdio.h>
int main()
{
int a, b;
int c = 0;
scanf_s("%d %d", &a, &b);
//int c = (a > b) ? a : b;
c = a % b;
while (c=a%b)//不理解,为啥while的判断句中必须是c=a%b,不能是c,或者a%b,或者c!=0
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
求输入两数的最大公约数。不理解,为啥while的判断句中必须是c=a%b,不能是c,或者a%b,或者c!=0
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在计算两个整数的最大公约数(Greatest Common Divisor, GCD)时,我们通常采用欧几里得算法(Euclidean Algorithm)。在这个算法中,关键的一点是要不断更新两个数之间的关系,直到找到一个余数为零的情况。当余数为零时,较小的那个数就是最大公约数。
在给定的C语言代码中,
while
循环的作用是不断执行以下步骤:- 计算当前
a
除以b
的余数,并将结果赋值给变量c
。 - 如果余数
c
不等于0,则继续循环。否则,跳出循环,此时b
即为最大公约数。
之所以写成
while(c=a%b)
,而不是其他形式,是因为这个表达式同时完成了两个操作:计算余数并将其赋值给c
。这样做的好处是可以简化代码,减少不必要的中间步骤。让我们逐行分析这段代码:
// 用户输入两个整数 scanf_s("%d %d", &a, &b); // 初始化变量c为a和b中的较大值,这里已经注释掉,但实际应用中可以考虑保留这个初始化过程 // c = (a > b) ? a : b; // 初始化c为a除以b的余数 c = a % b; // 当余数不为0时,执行循环 while (c=a%b) { // 更新a和b的值,使a变为原来的b,b变为原来的余数c a = b; b = c; } // 输出最大公约数b printf("%d\n", b);
如果你对某个部分有疑问,或者想要更详细的解释,请随时告诉我。
解决 无用评论 打赏 举报 编辑记录- 计算当前
悬赏问题
- ¥15 ansys fluent计算闪退
- ¥15 有关wireshark抓包的问题
- ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
- ¥15 向数据表用newid方式插入GUID问题
- ¥15 multisim电路设计
- ¥20 用keil,写代码解决两个问题,用库函数
- ¥50 ID中开关量采样信号通道、以及程序流程的设计
- ¥15 U-Mamba/nnunetv2固定随机数种子
- ¥15 vba使用jmail发送邮件正文里面怎么加图片
- ¥15 vb6.0如何向数据库中添加自动生成的字段数据。