作业帮 > 综合 > 作业

辗转相除法C语言求大神指教

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/04 19:06:06
辗转相除法C语言求大神指教
#include<stdio.h>
void main()
{
\x05int acd(int m1,int m2);
\x05int x,y,a,b,t;
\x05printf("Please enter two number:\n");
\x05scanf("%d,%d",&x,&y);
\x05if(x>y)
\x05{t=x;x=y;y=t;}
\x05a=acd(x,y);
\x05b=(x*y)/a;
\x05printf("最大公约数为=%d\n最小公倍数为=%d\n",a,b);
}
int acd(int m1,int m2)
{
\x05int r;
\x05while(r!=0)
\x05{
\x05\x05r=m2%m1;m2=m1;m1=r;
\x05}
\x05return r;
}

执行之后居然出现了如图结果!请问是怎么回事?
辗转相除法C语言求大神指教
#include<stdio.h>
int acd(int,int);
void main()
{

int x,y,a,b,t=0;
printf("Please enter two number:\n");
scanf("%d,%d",&x,&y); // 两数之间用逗号隔开

if(x>y){
t=x;
x=y;
y=t;
}
a=acd(x,y);
b=(x*y)/a;
printf("最大公约数为=%d\n最小公倍数为=%d\n",a,b);
}
int acd(int m1,int m2)
{
int r;
r=m1;
if(r==1) return 1;
while(r)
{
   if(m1%r==0&&m2%r==0) return r;
   --r;
}
    return -1;
}
再问: 大神好厉害~话说我定义的那种函数算法不对吗?能不能尽量在我的这个基础上改正呢?
再答: #include<stdio.h>
int acd(int,int);
void main()
{

int x,y,a,b,t=0;
printf("Please enter two number:\n");
scanf("%d,%d",&x,&y); // 两数之间用逗号隔开

if(x>y){
t=x;
x=y;
y=t;
}
a=acd(x,y);
b=(x*y)/a;
printf("最大公约数为=%d\n最小公倍数为=%d\n",a,b);
}

int acd(int m1,int m2)
{
int r; // r作为余数
if(r==1) return 1;
        r=m2%m1; // 取余数
while(r) // 余数不为0 
{
  r=m2%m1; // 反复取余数直至r余数为0
          m2=m1;   // 反复令上一个余数作为下一轮的被除数
  m1=r;    // 反复令当前余数作为下一轮的除数
}
        return m2; // m2就是最后一次的除数.也就是最大公约数。
}