【C语言练习】求两个数m和n的最大公约数(辗转相除法)
生活随笔
收集整理的這篇文章主要介紹了
【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; }三、實現結果
總結
以上是生活随笔為你收集整理的【C语言练习】求两个数m和n的最大公约数(辗转相除法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 樱桃推出 CHERRY KW 7100
- 下一篇: 元气动森所有菜品的配方