LCM和GCD在C中使用递归或普通方法

  • 本文关键字:递归 方法 GCD LCM c
  • 更新时间 :
  • 英文 :


虽然试图从编程简化GCD和LCM程序...我面临着结果问题。我做的一切都是正确的(据我说),甚至逐字检查,但问题仍然存在......我只粘贴普通方法的代码。

#include <stdio.h>
int main()
{
    int a, b, x, y, t, gcd, lcm;
  
    printf("Enter first number :");
    scanf("%d", &a);
    printf("Enter first number :");
    scanf("%d", &b);
  
    a = x;
    b = y;
  
    while (b != 0)
    {
        t = b;
        b = a % b;
        a = t;
    }
  
    gcd = a;
    lcm = (x * y)/gcd;
  
    printf("Greatest common divisior of %d and %d = %dn", x, y, gcd);
    printf("Lowest common divisior of %d and %d = %dn", x, y, lcm);
  
    getch();    
}

至少这部分从根本上是错误的:

int a, b, x, y, t, gcd, lcm;
printf("Enter first number :");
scanf("%d", &a);
printf("Enter first number :");
scanf("%d", &b);
a = x;
b = y;

因此,您声明xy未初始化,然后将它们分配给ab - 现在ab不包含用户输入的值,而是一些垃圾。你可能想要

x = a;
y = b;

相反。

最好试试这个。这更容易运行。

#include<stdio.h>
int GCD(int,int); 
void main(){
int p,q;
printf("Enter the two numbers: ");
scanf("%d %d",&p,&q);
printf("nThe GCD is %d",GCD(p,q));
printf("nThe LCM is %d",(p*q)/(GCD(p,q)));
}
int GCD(int x,int y){
if(x<y)
GCD(y,x);
if(x%y==0)
return y;
else{
GCD(y,x%y);
 }
}

试试吧

#include<stdio.h>
int main(){
int a,b,lcm,gcd;
printf("enter two value:n");
scanf("%d%d",&a,&b);
gcd=GCD(a,b);
lcm=LCM(a,b);
printf("LCM=%d and GCD=%d",lcm,gcd);
return 0;
}
int GCD(int a, int b){
while(a!=b){
    if(a>b){
        a=a-b;
    }else{
    b=b-a;
    }
    }
  return a;
}
int LCM(int a, int b){
return (a*b)/GCD(a,b);
}

最新更新