最大公约数 C/C++ leetcode , 辗转相除,更相减损

#include <iostream>
using namespace std;

// 辗转相除法求最大公约数, 用大的模小的,然后用除数模余数,该接口在新版的C++17的numeric 包中也有
int gcd1(int a ,int b ){
    if(a>b){
        while(a%b != 0 ){
            int c = a%b;
            a = b;
            b = c;
        }
        return b;
    }
    
    else{
        while(b%a != 0){
            int c = b%a;
            b = a;
            a = c;
        }
        return a;
    }
}

//更相减损术求最大公约数,  用大的减去小的,然后用较大的再减较小的,一直到两者一样。
int gcd2(int a,int b){
    if(a>b){
        while(a != b){
            int c = a-b;
            if(c > b) {a = c;}
            else {a = b;b = c;}
        }
    }
    else{
        while(b != a){
            int c = b-a;
            if(c > a) {b = c;}
            else {b=a;a = c;}
        }
    }
    return a;
}

int main() {
    int a, b;
    while (cin >> a >> b) { // 注意 while 处理多个 case
        int c = gcd2(a,b);
        cout<<a/c * b;
    }

}
posted @ 2022-11-12 03:20  danieldai  阅读(60)  评论(0编辑  收藏  举报