我写了这段代码来获取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;
}
答案 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);
}
}