AA.Q 2024-01-29 23:08 采纳率: 50%
浏览 7
已结题

求最小公倍数,一个数直接被另一个数整除结果异常

如果输入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);

}
  • 写回答

4条回答 默认 最新

  • VRJerry 2024-01-29 23:17
    关注

    你的逻辑上基本没什么问题,你说发生的问题是会输出多个结果吗?那是因为你的循环找到第一个公倍数之后,并没有结束,而是一直会找到你的循环截止条件。
    以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;//找到一个最小的公倍数就结束循环即可
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月7日
  • 已采纳回答 1月30日
  • 创建了问题 1月29日