c++中求兩個數的最大公約數和最小公倍數(輾轉相除法)
阿新 • • 發佈:2018-12-12
輸入兩個正整數m和n,求其最大公約數和最小公倍數
#include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int m,n,t; cout<<"請輸入兩個正整數:"<<endl; cin>>m>>n; int x=m;//將最初的m和n的值分別用x和y儲存起來,後面計算最小公倍數時需要用到 int y=n; if(m<n){ t=m;//t為中間變數,來實現m與n的值的相互交換,保證被除數大於除數 m=n; n=t; } int r=m%n; while(r){//用n來除以m,直到m被n整除,迴圈終止,此時r的值為0,在c++中只有0才為假,任何非0的值都判斷為真 m=n;//輾轉相除法的核心就是用較大的數m去除較小的數n,如果剛好能整除,則m與n的最大公約數為n,如果不能整除,則將n的值賦給m,餘數r賦給n,再進行下一次的相除,以此迴圈,直到整除為止 n=r; r=m%n; } cout<<"最大公約數為:"<<n<<endl; cout<<"最小公倍數為:"<<x*y/n<<endl;//兩個數的最小公倍數等於兩個數的乘積除最小除他們的最大公約數 return 0; }