题目:给定两个数18和24,求这两个数的最大公约数。
代码举例:
#include<stdio.h>
int main()
{
int a = 18;
int b = 24;
int c = 0;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
运行结果:
题目解析:
1. 明确概念:
最大公约数:即两个数据中公共约数的最大者。
2. 思路方法:
明确数学方法,转换成代码:
2.1 数学方法:辗转相除法,质因数分解法,短除法,更相减损法。
此处运用辗转相除法:辗转相除法是一种简单的求最大公约数的方法,其基本思想是:用较大的数除以较小的数得到商和余数,再用较小的数除以商得到新的商和余数,如此反复,直到余数为零为止,最后一次除数即为最大公约数。
2.2 转换为代码:根据上述文字描述,采用循环思想
1. 定义变量并初始化(注意:a和b谁的值大,没有特定要求,原因请看2,一看就明白)
2. 循环,变值:
第一次:a = 18 b = 24 c = a%b = 18%24 = 18
循环中:a = 24 b=18
第二次:a = 24 b = 18 c = a%b = 24%18 = 6
循环中:a = 18 b = 6
第三次:a = 18 b = 6 c=a%b = 18%6 = 0
循环结束
3. 输出最后一次除数。
题目扩展优化:输入两个数,并求这两个数的最大公约数。
思想:
如果我们别的数的最大公约数,该如何办?
可以对a,b初始化进行改变。
若让输入呢?多组输入呢?
代码举例:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
int c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
printf("最大公约数为:%d\n", b);
return 0;
}
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("请输入两个整数:\n");
while (scanf("%d %d", &a, &b) == 2)//多组输入
{
int c = a % b;
while(c != 0)//循环,辗转相除法
{
a = b;
b = c;
c = a % b;
}
printf("最大公约数为:%d\n", b);
}
return 0;
}
运行结果:
本篇文章再次运用循环知识,加深理解。