关于最大公约数的困扰
int yue(int x,int y){ int i,t;
int n;
if (x>=y) t=y;
else t=x;
for(i=1;i<=t;i++)
{ (x%i==0)&&(y%i==0);
n=i;
}
return(n);
}
以上是一个求最大公约数的函数,请问大虾错在哪里?我老运行不出来
----------------解决方案--------------------------------------------------------
for(i=1;i<=t;i++)
{ if(x%i==0 && y%i==0)
n=i;
}
----------------解决方案--------------------------------------------------------
论坛里有这样的例子,求最大公约数和最小公倍数的函数,在C语言中用辗转相除法比较多.
呵呵,我是刚看到的,以前也不知道.我转载一个.
比如:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序源代码:
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1 { temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}
----------------解决方案--------------------------------------------------------
利用递归求公约数
int gcd(num1,num2) //求最大公约数
{
if(num1<num2) //如果num1比num2小,则将他们交换位置
{ temp=num1;
num1=num2;
num2=temp;
}
if(num1%num2==0)
return num2;
else
return gcd(num2,num1%num2);
}
公倍数就是num1*num2/gcd(num1,num2)
----------------解决方案--------------------------------------------------------
谢谢大家的回复,豁然开朗了
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
int a,b,c;
while(b)
{ c=a%b;
a=b;
b=c;
}
renturn a;
----------------解决方案--------------------------------------------------------
for(i=1;i<=t;i++)
{ (x%i==0)&&(y%i==0);
n=i;
这个里面的i应该是从2开始,也就是for(i=2;i<=t;i++)否则的话,你运行出来的n永远是1.还有如果从2开始取余,没有找到最大公约数,那么公约数就是1了。说明你的程序还没有编完嘛
----------------解决方案--------------------------------------------------------