小弟刚开始学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 ; }