简单的GCD程序无法运行

时间:2013-09-30 19:36:42

标签: c crash greatest-common-divisor

为什么这个程序不起作用?这是使用递归函数的简单最常见的除数程序。它编译没有错误,但是当我运行program.exe它只是崩溃:“程序已停止工作”。我在codeblocks和Notepad ++上尝试过它。我使用gcc编译器。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int gcd(int,int);
int main(int argc,const char* argv[]){
int a;
int b;
a = atoi(argv[1]);
b = atoi(argv[2]);
printf("The greatest common divisor of %d and %d is %d\n",a,b,gcd(a,b));
return 0;
}
int gcd(int a,int b){
    if(a==0)
        return a;
    else
        return gcd(b, a%b);
}

2 个答案:

答案 0 :(得分:4)

您有此错误:

  if(a==0)

应该是

  if(b==0)

您想检查除数不是0,而不是被除数。

答案 1 :(得分:0)

在你的程序中,你需要添加一个&gt; b条件的检查以消除除以0的问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int gcd(int,int);
int main(int argc, char ** argv[]){
int a;
int b;
int c;
a = atoi(argv[1]);
b = atoi(argv[2]);
if (a<b)
    {                            //swapping if a<b
        c=a;
        a=b;
        b=c;
    }
printf("The greatest common divisor of %d and %d is %d\n",a,b,gcd(a,b));
return 0;
}
int gcd(int a,int b){
    int r1=a%b;
    while(r1>0)
        return gcd(b,r1);
        return b;
}