不用辗转相除,只需要根据数学定义,找出最大的可以同时整除两个数值,即为最大公约数。
代码如下:
int gcd(int a,int b)//求a,b的最大公约数,并返回。
{
int r = a>b?b:a;
while(r)
{
if(a%r==0 && b%r==0)break;//最大的可以同时整除二者的数,即为最大公约数。
r--;
}
return r;
}
#include
#include
int main()
{
int a,b,t,x,y;
scanf("%d%d",&x,&y);
if(x>y)
{t=x;
x=y;
y=t;}
for(a=x;a>=1;a--)
{if(x%a==0&&y%a==0); break;}
printf("最大公约数:%d",a);
b=a*(x/a)*(y/a);
printf("最小公倍数:%d",b);
system("pause");
return 0;
}
公约公倍有了。。不需要可以去了。。DEV c++是这样的。。。VC可以把第二行#include
输入两个正整数,求它的最大公约数指!
#include
void main()
{
int a,b,c,i; //c为最大公约数
printf("input a,b:\n");
scanf("%d %d\n",&a,&b);
if(a>b)
{
for(i=b;i>=1;i--) //倒过来算,第一个就是最大公约数
if(a%i==0 && b%i==0) c=i;
}
else
for(i=a;i>=1;i--)
if(a%i==0 && b%i==0) c=i;
printf("c=%d\n",c);
}
思路应该不复杂!编译了,没错误