euclidean算法求最大公因子的代码实现

假设a和b是两个不全为0的整数,以下代码用C/C++实现了求它们最大公因子的算法(当a和b均为0时,返回-1标记参数错误)。

// find the greatest common factor of a and b
int findGCD(int a, int b) {
    if (0 == a && 0 == b) {
        return -1;
    }

    if (a < 0) {
        a = -a;
    }
    if (b < 0) {
        b = -b;
    }

    if (0 == b) {
        return a;
    }

    int q = a/b;
    int r = a - q * b;
    while (0 != r) {
        a = b;
        b = r;
        q = a/b;
        r = a - q * b;
    }
    return b;
}