如果输入3和4、5和7结果正常。但输入2和4、4和8这种一个数能直接被另一个数整除的,结果不正常。有没有人能解释一下
int a = 0, b = 0;
scanf("%d %d",&a,&b);
int c = 0;
//求最小公倍数
for (c = (a>b?a:b); c <= a * b; c++)
{
if((c % a == 0) && (c % b == 0))
printf("%d\n", c);
}
如果输入3和4、5和7结果正常。但输入2和4、4和8这种一个数能直接被另一个数整除的,结果不正常。有没有人能解释一下
int a = 0, b = 0;
scanf("%d %d",&a,&b);
int c = 0;
//求最小公倍数
for (c = (a>b?a:b); c <= a * b; c++)
{
if((c % a == 0) && (c % b == 0))
printf("%d\n", c);
}
你的逻辑上基本没什么问题,你说发生的问题是会输出多个结果吗?那是因为你的循环找到第一个公倍数之后,并没有结束,而是一直会找到你的循环截止条件。
以2,4为例,你的循环会从4开始,一直找到8为止,而4是最小公倍数,8是另一个公倍数,但都是满足if条件的,所以4和8都会输出出来。解决这个问题的办法就:if的print下面加return或者加break。
return的意思是直接结束main函数,break的意思是跳出循环,但是因为你循环外面也没有东西,在这个程序里实际上是等价的。
int a = 0, b = 0;
scanf("%d %d", &a, &b);
int c = 0;
//求最小公倍数
for (c = (a > b ? a : b); c <= a * b; c++)
{
if ((c % a == 0) && (c % b == 0))
{
printf("%d\n", c);
break;//找到一个最小的公倍数就结束循环即可
}
}