C++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)
更新時(shí)間:2021年10月03日 23:42:24 投稿:lqh
這篇文章主要介紹了c++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)的相關(guān)資料,需要的朋友可以參考下
C++ 實(shí)現(xiàn)求最大公約數(shù)和最小公倍數(shù)
最大公約數(shù)
輾轉(zhuǎn)相除法:
int maxDivisor(int a, int b)
{
int c = b;
while (a%b != 0)
{
c = a%b;
a = b;
b = c;
}
return c;
}
輾轉(zhuǎn)相減法:
int maxDivisor(int a, int b)
{
while (a != b)
{
if (a>b) a = a - b;
else b = b - a;
}
return a;
}
輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)
#include<iostream>
using namespace std;
int main()
{
int m,n,t;
cout<<"請(qǐng)輸入兩個(gè)正整數(shù):"<<endl;
cin>>m>>n;
int x=m;//將最初的m和n的值分別用x和y保存起來(lái),后面計(jì)算最小公倍數(shù)時(shí)需要用到
int y=n;
if(m<n){
t=m;//t為中間變量,來(lái)實(shí)現(xiàn)m與n的值的相互交換,保證被除數(shù)大于除數(shù)
m=n;
n=t;
}
int r=m%n;
while(r){//用n來(lái)除以m,直到m被n整除,循環(huán)終止,此時(shí)r的值為0,在c++中只有0才為假,任何非0的值都判斷為真
m=n;//輾轉(zhuǎn)相除法的核心就是用較大的數(shù)m去除較小的數(shù)n,如果剛好能整除,則m與n的最大公約數(shù)為n,如果不能整除,則將n的值賦給m,余數(shù)r賦給n,再進(jìn)行下一次的相除,以此循環(huán),直到整除為止
n=r;
r=m%n;
}
cout<<"最大公約數(shù)為:"<<n<<endl;
cout<<"最小公倍數(shù)為:"<<x*y/n<<endl;//兩個(gè)數(shù)的最小公倍數(shù)等于兩個(gè)數(shù)的乘積除最小除他們的最大公約數(shù)
return 0;
}
或
#include<iostream>
using namespace std;
int gys(int x,int y)
{
return y? gys(y,x%y):x;
}
int main()
{
int x,y;
cin>>x>>y;
cout<<"最大公約數(shù)是:";
cout<<gys(x,y)<<endl;
cout<<"最小公倍數(shù)是:";
cout<<(x*y)/gys(x,y);
return 0;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C語(yǔ)言 以字符串的形式讀寫(xiě)文件詳解及示例代碼
本文主要介紹 C語(yǔ)言以字符串的形式讀寫(xiě)文件,這里提供了詳細(xì)的資料及簡(jiǎn)單示例代碼以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分的小伙伴可以參考下2016-08-08
基于C語(yǔ)言實(shí)現(xiàn)靜態(tài)通訊錄的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的靜態(tài)通訊錄,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下2022-07-07
利用C語(yǔ)言實(shí)現(xiàn)頁(yè)面置換算法的詳細(xì)過(guò)程
一個(gè)好的頁(yè)面置換算法,應(yīng)具有較低的頁(yè)面更換頻率,從理論上講,應(yīng)該保留最近重復(fù)訪問(wèn)的頁(yè)面,將以后都不再訪問(wèn)或者很長(zhǎng)時(shí)間內(nèi)不再訪問(wèn)的頁(yè)面調(diào)出,下面這篇文章主要給大家介紹了關(guān)于利用C語(yǔ)言實(shí)現(xiàn)頁(yè)面置換算法的相關(guān)資料,需要的朋友可以參考下2022-11-11

