求两个数m和n的最大公约数
一、编程思路
1、首先,题目里是两个数,我们自然而然要想到定义两个变量;
2、其次,我们的目的是寻找最大公约数,所以要搞清楚其概念:两个或多个整数共有约数中最大的一个
3、然后,我们就需要确定寻找最大公约数的方法,本次我们采用的是辗转相除法。从字面意思来看,辗转相除就是反复的用同一种方式进行除法计算,直到得出最终的解,大致思路就是:两个数做取余运算,若余数不为0,则将上一轮的除数当做下一轮的被除数,将这一轮获取到的余数作为下一轮的除数,直到余数为0为止。当余数为0时,其上一轮取到的余数便为最大公约数
4、最后,我们需要将整体思想转化为计算机可以看懂的语言:
① 首先定义四个变量:m,n,t,r.m和n为两个随机数,t为中间变量用于交换,r为余数
②然后就是用scanf_s()函数获取键盘上输入的值
③我们设计的取余运算式为:m%n,因为取余运算中,分母不能为0,所以我们需要考虑n为0的情况。当n=0时,m和n做一次位置交换
④其次就是利用循环,找出余数为0的情况。利用while()循环,当取到的余数不为0时,继续循环;当取到的余数为0时,结束循环,并且输出这一轮作为除数的那个值,即为最大公约数。
二、源码
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main() {
int m, n, t, r; //m , n为两个随机数;t为中间变量用于交换;r为余数;
printf("please input the two number:\n");
scanf_s("%d,%d",&m,&n);
if (n == 0) { //为了保证分母n不是0,将分子m和n交换,分子换成0,分母换成不是0的数,因为分母为0会报错;
t = m;
m = n;
n = t;
}
//以下算法便是利用了辗转相除法
while (m % n != 0) { //取余结果如果一直不是0,意思就是没有找到可以被整除的数,一直循以下语句;
r = m % n; //将取到的余数的值存放在r里;
m = n; //将n的值赋值给m,意思就是将本轮的n作为下一轮的被除数;
n = r; //将余数r里的值赋值给n,意思就是将本轮的余数r作为下一轮的除数
} //若m%n = 0,则跳出循环,此时获取到的r便是最大公约数
printf("the greatest common divisor is: %d\n",n);
system("pause");
return 0;
}
三、实现结果