【C语言练习】求两个数m和n的最大公约数(辗转相除法)

求两个数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;
}


三、实现结果

在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值