所以我试着为刚刚开始学习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%i
和var2%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;
}
它没有任何问题。所以,我想知道第一个代码有什么问题?
答案 0 :(得分:2)
你不能%by 0,因为它会产生一个被零除的异常。你需要在第一个循环中以1而不是0开始。