最大公约数(辗转相除)

和自甴很熟 提交于 2020-02-26 19:04:59

题目描述

输入两个正整数,求其最大公约数。

输入描述

测试数据有多组,每组输入两个正整数。

输出描述

对于每组输入,请输出其最大公约数。

输入

49 14

输出

7

代码

常规法

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int i,x,y;
    while(cin>>x>>y){
        int Min=min(x,y);
        for(int i=Min;i>=1;i--){
            if(x%i==0&&y%i==0){
                cout<<i<<endl;
                break;
            }
        }
    }
    return 0;
}

进阶版1:辗转相除法

#include<iostream>
using namespace std;
int GCD(int a,int b){
    return a%b?GCD(b,a%b):b;
}
int main(){
    int x,y;
    while(cin>>x>>y){
        cout<<GCD(x,y)<<endl;
    }
    return 0;
}

进阶版2:

#include<iostream>
using namespace std;
int gcd(int a,int b){
    if(a%b==0)
        return b;
    return gcd(b,a%b);
}
int main(){
    int x,y;
    cin>>x>>y;
    cout<<gcd(x,y)<<endl;
    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!