使用递归或正规方法的C语言中的LCM和GCD

使用递归或正规方法的C语言中的LCM和GCD,c,C,大家好,当我试着从programmingsimplified做GCD和LCM程序时…我面临着结果方面的问题。我做的每件事都是正确的(根据我的说法),甚至逐字检查,但问题仍然存在……我只是在粘贴普通方法的代码 #include <stdio.h> int main() { int a, b, x, y, t, gcd, lcm; printf("Enter first number :"); scanf("%d", &a); printf("En

大家好,当我试着从programmingsimplified做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 = %d\n", x, y, gcd);
  printf("Lowest common divisior of %d and %d = %d\n", x, y, lcm);

  getch();

  }
#包括
int main()
{
int a、b、x、y、t、gcd、lcm;
printf(“输入第一个数字:”);
scanf(“%d”和“&a”);
printf(“输入第一个数字:”);
scanf(“%d”和“b”);
a=x;
b=y;
而(b!=0)
{
t=b;
b=a%b;
a=t;
}
gcd=a;
lcm=(x*y)/gcd;
printf(“%d和%d的最大公约数=%d\n”,x,y,gcd);
printf(“最低公约数%d和%d=%d\n”,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;
因此,您将
x
y
声明为未初始化,然后将它们分配给
a
b
——现在
a
b
不包含用户输入的值,而是一些垃圾。你可能想要

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);
 }
}
#包括
int GCD(int,int);
void main(){
int p,q;
printf(“输入两个数字:”);
scanf(“%d%d”、&p和&q);
printf(“\nGCD为%d”,GCD(p,q));
printf(“\n LCM为%d”,(p*q)/(GCD(p,q));
}
整数GCD(整数x,整数y){
如果(x试试看

#包括
int main(){
int a、b、lcm、gcd;
printf(“输入两个值:\n”);
scanf(“%d%d”、&a和&b);
gcd=gcd(a,b);
lcm=lcm(a,b);
printf(“LCM=%d和GCD=%d”,LCM,GCD);
返回0;
}
内部GCD(内部a、内部b){
while(a!=b){
如果(a>b){
a=a-b;
}否则{
b=b-a;
}
}
返回a;
}
内部LCM(内部a、内部b){
报税表(a*b)/GCD(a、b);
}

结果中存在哪些问题?您输入了什么,您期望得到什么,以及您得到了什么?感谢您的评论,但问题已通过下面的答案得到解决…从下一次开始,我将记住陈述与此相关的每一个问题和每一件事…感谢它成功了…您能再解释一下吗??thanks@Shivam抱歉,没有。如果你不明白,那么你就急需发展一些更为常识和逻辑/算法思维。兄弟,我明白了背后的逻辑,但我不明白它是如何处理垃圾值的。这就是我不明白的。@Shivam,因为你将变量分配给了其他未初始化的变量。这是一个错误这是一个很老的问题,有一个公认的答案。另外,你的解决方案不是用C写的,是吗?
#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);
}