GCD逻辑错误

时间:2015-03-29 11:57:37

标签: c greatest-common-divisor

我写了这段代码来获取c中的gcd。它适用于小数字 但是当我尝试60和90时,我得到2,而9和6得到3。

#include "stdio.h"
#include "stdlib.h"
int main()
{
    int a,b,x,gcd;
    printf("Please Enter the fraction");
    scanf("%d", &a);
    scanf("%d", &b);
    if(b%a == 0)
        gcd =a;
    else
    {
        x=a;
        while(--x>1)
        {
            if (a%x == 0 && b%x==0)
            {  
                 gcd =x;
            }
        }
    }
    printf("GCD = %d", gcd);
    return 0;
}

2 个答案:

答案 0 :(得分:4)

如果第二个if中的条件为真,则需要中断循环。只需在第二个break;的正文中添加if

if (a%x == 0 && b%x==0)
  gcd =x;

应该是

if (a%x == 0 && b%x==0)
{
  gcd =x;
  break;
}

否则循环继续并找到大于1的最低公约数。

答案 1 :(得分:1)

#include "stdio.h"
#include "stdlib.h"
int main()
{
    int a,b,x,gcd;
    printf("Please Enter the fraction");
    scanf("%d", &a);
    scanf("%d", &b);
    if(b%a == 0)
        gcd =a;
    else
    {
        x=a;
        while(--x>1)
        {
            if (a%x == 0 && b%x==0){
                gcd =x;
                break;
            }
        }
    }
    printf("GCD = %d", gcd);
    return 0;
}

问题是,当你找到gcd时,你必须打破循环 //否则你可以使用这个递归函数

int gcd(int a, int b) {
    if ( a == 0 ) {
        return b;
    } else {
        return gcd(b%a, a);
    }
}