1. 程式人生 > >c++中求兩個數的最大公約數和最小公倍數(輾轉相除法)

c++中求兩個數的最大公約數和最小公倍數(輾轉相除法)

輸入兩個正整數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;
}