2015-11-18 50 views
0

所以我试着做一个函数来找到一个刚刚开始学习C++(我有一些C++基础知识)的朋友的GCD(最大公约数)。因此,这里是我的代码:最大的公因子

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; 
} 

它编译,但问题是.exe文件停止时,它会尝试使用运营商“%”的工作。在这种情况下,在这行代码中:var1%ivar2%i。所以,我试图代码调整一点点进入这个:

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; 
} 

和它的工作没有任何问题。所以,我想知道第一个代码有什么问题?

+1

好吧,n%0看起来不像是可计算的东西,是吗? – Lao

+0

在代码中,你从int i = 0开始;然后使用var mod 0.结果是未定义的,因为它是零除错误。 –

+0

@ Mr.Llama因为我擦除的一部分,该.exe作品就好 – YorS

回答

2

你不能%0,因为它会产生一个零除异常。你需要在第一个循环中以1开始而不是0。

+1

啊... THX。现在原谅我,而我收集我的信心又回来了没有注意到那个愚蠢的错误。但严重的是,thx。我不知道为什么我没有意识到那个哈哈 – YorS