最大公因式 所以我尝试为刚刚开始学习C++的朋友找到一个GCD(最大公因数)(我有一些C++基础知识)。这是我的代码: int gcd(int var1, int var2){ int result; if(var1<1 || var2<1){ return 0; //means error } else { for(int i=0; i<=var1 && i<=var2; i++){ if((var1%i) == 0 && (var2%i) == 0){ result = i; } } } return result; }

最大公因式 所以我尝试为刚刚开始学习C++的朋友找到一个GCD(最大公因数)(我有一些C++基础知识)。这是我的代码: int gcd(int var1, int var2){ int result; if(var1<1 || var2<1){ return 0; //means error } else { for(int i=0; i<=var1 && i<=var2; i++){ if((var1%i) == 0 && (var2%i) == 0){ result = i; } } } return result; },c++,function,greatest-common-divisor,C++,Function,Greatest Common Divisor,它毫无问题地工作了。所以,我想知道第一个代码有什么问题?您不能%by 0,因为它将生成一个除零异常。在第一个循环中,您需要从1开始i,而不是从0开始。嗯,n%0看起来不像是可计算的,是吗?在代码中,您是从int i=0开始的;然后使用var mod 0。结果是未定义的,因为它是一个被零除的错误。@Mr.Llama,因为我删除了该部分,而.exe只起作用fine@Lao对我想知道为什么我没有发现mistake@ShyamalDesai是的,谢谢回复。我很愚蠢,没有意识到哈哈。。。谢谢。现在请原谅,

它毫无问题地工作了。所以,我想知道第一个代码有什么问题?

您不能%by 0,因为它将生成一个除零异常。在第一个循环中,您需要从1开始i,而不是从0开始。

嗯,n%0看起来不像是可计算的,是吗?在代码中,您是从int i=0开始的;然后使用var mod 0。结果是未定义的,因为它是一个被零除的错误。@Mr.Llama,因为我删除了该部分,而.exe只起作用fine@Lao对我想知道为什么我没有发现mistake@ShyamalDesai是的,谢谢回复。我很愚蠢,没有意识到哈哈。。。谢谢。现在请原谅,我重新找回信心,因为我没有注意到那个愚蠢的错误。但说真的,谢谢。我不知道为什么我没有意识到,哈哈
int gcd(int var1, int var2){
    int result;
    if(var1<1 || var2<1){
        result = 0; //means error
    } else {
        for(int i=var1; i>=1; i--){
            if((var1%i) == 0 && (var2%i) == 0){
                result = i;
                break;
            }
        }
    }
    return result;
}