求最大公约数和最小公倍数的方法

    技术2024-11-19  21

    小弟刚开始学C,在编写一个求最小公倍数的程序时遇到了点问题,输入了两个数后就没反应了,请问错在哪里了呢?#include<stdio.h>#include<stdlib.h>int main(){  int x,y;  printf("Please input two number./n");  scanf("%d %d", &x,&y);  int minX=x,minY=y;  while (1)  {     if(minX!=minY)  {  minX=minX+x;  minY=minY+y;  }  else{  printf("%d",minX);  break;  }  }    system("pause");   }

     

     

    你的算法明显不对呀,比如x=2, y=3, 循环的过程:minX: 2、4、6、8、……minY: 3、6、9、12、……这样下去永远都不会相等,结果就死循环了

     

     

    while (1)  {  if(minX<minY)  minX=minX+x;  else if(minX>minY)  minY=minY+y;  else{  printf("%d",minX);  break;  }  }

     

    一般求x,y的最小公倍数ans,先求x与y的最大公约数z,则 ans == x*y/z;

     

    #include < stdio.h > int gcd( int x, int y) { int tmp; if (x < y) { tmp = x; x = y; y = tmp; } while (y) { tmp = x % y; x = y; y = tmp; } return x; } int lcm( int x, int y) { return x * y / gcd(x,y); } int main() { int x, y; scanf( " %d%d " , & x, & y); printf( " gcd: %d/n " , gcd(x,y)); printf( " lcm: %d/n " , lcm(x,y)); return 0 ; }

    最新回复(0)