C语言,输出两个数的最大供约数和最小公倍数,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,输出两个数的最大供约数和最小公倍数,相关的知识,希望对你有一定的参考价值。

C语言,输出两个数的最大供约数和最小公倍数,为什么输入12和18输出了floating point expection?
#include<stdio.h>
int gys(int x,int y)
int i,z;
for(i=y;i>=1;i--)
if(x%i==0&&y%i==0)
z=i;break;
return(z);

int gbs(int x,int y)
int i,z;
for(i=x;;i++)
if(x%i==0&&y%i==0)
z=i;break;
return(z);

int main()
int m,n,t;
int gys(int x,int y);
int gbs(int x,int y);
scanf("%d%d",&m,&n);
if(m<n)
m=t;t=n;n=m;
printf("最大公约数是%d\n最小公倍数是%d\n",gys(m,n),gbs(m,n));
return 0;

while(a%b!=0)a=b;b=a%b;
这句话错了,第二句b=a%b时,a已经变为了b,所以会出错,这里必须有一个临时变量。

在while外声明int tmp;

改成
while(a%b!=0)tmp=a;a=b;b=tmp%b;
参考技术A if(m<n)
m=t;t=n;n=m;
这块错了,m和n都赋值成0了
参考技术B int gbs(int x,int y)
   int i,z;
    for(i=x;;i++)
    if(x%i==0&&y%i==0)
        z=i;break;
    return(z);

x%i==0&&y%i==0应该是
i%x==0&&i%y==0

C语言求两个数的最大公约数和最小公倍数代码,为啥这里输出最大公约数的会输出两遍,初学者求详细解答

解惑解惑

最大公约数函数被调用了两次,每次调用都会输出一次,所以是两次。

请点一下采纳按钮,非常感谢。

参考技术A 您好,非常荣幸能在此回答您的问题。以下是我对此问题的部分见解,若有错误,欢迎指出。
#include<stdio.h>
int main()
int a,b,num1,num2,temp;
printf("please input two number:\n");
scanf("%d%d",&num1,&num2);
if(num1<num2)
temp = num1;
num1 = num2;
num2 = temp;

a = num1;
b = num2;
while(b!=0) /*利用辗除法,直到b为0为止*/
temp = a%b;
a=b;
b=temp;
非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!追问

不审题,0分。

参考技术B 因为求最小公倍数时又调用了一次gcd函数。

可以这样改:
去掉main函数中gcd的调用。

以上是关于C语言,输出两个数的最大供约数和最小公倍数,的主要内容,如果未能解决你的问题,请参考以下文章

用python语言求两个数的最大公约数和最小公倍数

两数的最大公约数最小公倍数

C语言辗转相除法求2个数的最小公约数

C语言求两个数的最大公约数和最小公倍数代码,为啥这里输出最大公约数的会输出两遍,初学者求详细解答

汇编语言实现求两个数的最小公约数,平方差,各占和的百分比

求最大公约数和最小公倍数