C语言程序改错——求最大公约数和最小公倍数

供稿:hz-xin.com     日期:2025-01-12
c语言如何求最大公约数和最小公倍数

#include
int main()
{
int a,b,c,m,t;
printf("请输入两个数:
");
scanf("%d%d",&a,&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
m=a*b;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
printf("最大公约数是:
%d
",b);
printf("最小公倍数是:
%d
",m/b);
}

扩展资料
算法思想
利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。
再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。
#include是在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令还有很多,它们都以“#”开头,并且不用分号结尾,所以是c语言的程序语句。

#includevoidmain(){inttemp;inta,b,num1,num2;printf("pleaseinputnum1andnum2
");scanf("%d%d",&num1,&num2);if(num1>num2){a=num1;b=num2;}else{a=num2;b=num1;}while(b>0){temp=a%b;a=b;b=temp;}printf("最大公约数是%d
最小公倍数是%d
",a,(num1*num2)/a);}

#include <stdio.h>

int main(void)
{
    int a,b;
    int min,max;
    int i,s;
    scanf("%d %d",&a,&b);
    min=a<b?a:b;
    max=a>b?a:b;
    for(i=min;i>1;i--)
     if((min%i==0)&&(max%i==0))
     break;
    //what the hell?! 两个正整数怎么可能没有最大公约数!!!
    //if(i=1)//i=1   !!!! seriously!!!  赋值的 = 和判等的 == 都没有分清么
     //printf("no answer");
    s=max;
    for(s=max;;s++)
     if((s%min==0)&&(s%max==0))
     break;
    printf("%d %d",i,s);
    return 0;
}
 

递归+欧几里得算法

#include <stdio.h>

int gcd(int a,int b)
{
if(a%b)
{
return gcd(b,a%b);
}
return b;
}

int main(void)
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d %d",gcd(a,b),a/gcd(a,b)*b);
    return 0;
}
 

 另注:OJ的话要测试多组数据,输入往往是要写成

while(scanf("%d%d",&a,&b)!=EOF)
{
    ...
}


最大公约数可以是1。

#include <stdio.h>
int main(void)
{
int a,b;
int min,max;
int i,s;
scanf("%d %d",&a,&b);
min=a<b?a:b;
max=a>b?a:b;
for(i=min;i>1;i--)//i>1改为i>=1
if((min%i==0)&&(max%i==0))
break;
if(i=1)//此行删除
printf("no answer");//此行删除
s=max;
for(s=max;;s++)
if((s%min==0)&&(s%max==0))
break;
printf("%d %d",i,s);
return 0;
}


欧几里得算法~
#include <stdio.h>
#include <stdlib.h>
int gcd(int x,int y)
{
int i,k;
if(y==0)k=x;
else k=gys(y,x%y);
return k;
}
int main()
{
int a,b,c,d;
scanf("%d %d",&a,&b);
c=gys(a,b);//x和y的最大公约数
d=a*b/c;
printf("%d ",c);
printf("%d",d);
return 0;
}

确实粗心了点,这个地方错了
if(i=1)改成

if(i==1)

C语言程序改错——求最大公约数和最小公倍数
include <stdio.h>int main(void){ int a,b; int min,max; int i,s; scanf("%d %d",&a,&b); min=ab?a:b; for(i=min;i>1;i--) if((min%i==0)&&(max%i==0)) break; \/\/what the hell?! 两个正整数怎么可能没有最大公约数!!! \/\/if(i...

...分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数...
printf("最大公约数是:%d\\n最小公倍数是:%d\\n",q,p);}

C语言求最大公倍数与最小公约数程序求纠错
int main(){ int a, b, c, d, e;scanf("%d %d", &a, &b);e = a * b;if (a < b){ c = a;a = b;b = c;} d = a % b;for (; d != 0;){ a = b;b = d;d = a % b;} printf("%d %d", b, e \/ b);return 0;} ...

C语言——求最大公约数和最小公倍数的简单程序
本文讲解一下利用C语言求两个数字的最大公约数以及最小公倍数的方法。首先打开编译器,这里用的是VC++6.0,然后新建工程,选择下方的控制台应用程序,也就是“win32 console application”。然后新建一个文件,选择“C++ source file”,然后输入文件名,点击确定。接着输入如图所示的代码,注意检查看有...

求C语言程序:求两个整数的最大公约数和最小公倍数。
n=t;t=m%n;} return n;} void main(){ int m,n,gcd,lcm;\/*gcd是最大公约数,lcm是最小公倍数*\/ printf ("Input two integer m,n:");scanf("%d%d",&m,&n);gcd=fun(m,n);lcm=m*n\/gcd;\/*求最小公倍数*\/ printf("gcd=%d\\n",gcd);printf("lcm=%d\\n",lcm);} ...

c语言编程,求两个数的最大公约数和最小公倍数
");scanf("%d",&m);printf("请输入第二个数的值:");scanf("%d",&n);if(n>m){ temp=m;m=n;n=temp;} i=n;while(i%m!=0){ i=i+n;} printf("最小公倍数是:%d \\n",i);r=m%n;while(r!=0){ m=n;n=r;r=m%n;} printf("最大公约数是:%d \\n",n);} 图:...

C语言 求两个正整数最大公约数和最小公倍数
修改之后是:include<stdio.h> int main(){ int p,r,m,n,temp;printf("please enter two positive integer numbers:");scanf("%d %d",&p,&r);m=(p>r)?r:p;for(temp=1;temp<=m;temp++)if (p%temp==0 && r%temp==0)n=temp;printf("%d,%d\\n",n,p*r\/n);return 0;} ...

c语言 求最大公约数最小公倍数 程序出错
你这个循环最后出来 n 始终是 0,然后你用 p 除 n 就除 0 了,所以抛错了。应该是 printf("%d d",temp,p \/ temp);

C语言中定义全局变量来求最大公约数和最小公倍数,但我看不出我的程序...
求最大公约数的时候,你在找到能整除x和y的i值之后,没有把循环中断掉,循环会一直进行直到i变为0为止,所以最大公约数变成了1 应当在if(x%i==0 && y%i==0)的分支处,将GCD指定为i之后,写上break中断,并将这两句括在大括号里

用C语言如何编写如下程序:求两个数的最大公约数和最小公倍数.并说明...
include "stdio.h"include "maths.h"main(){int a,b,c,k,s;scanf("%d,%d",a,b);c=a;if(b<a) c=b;for(int i=1;i<=c;i++){ if((a%i==0&&b%i==0))k=i;}\/* k是最大公约数*\/ printf("%d",k);s=a*b\/k;\/* s是最小公倍数*\/ } ...