huafeng 发表于 2023-11-9 15:23:12

最大公因数

运行不报错,但输入数字后按回车没反应
#include<stdio.h>

int main()
{
    int a = 1, m = 0, n = 0, i = 2;
    scanf_s("%d%d", &m, &n);
    for (i = 2; i <= m && i <= n; i++)
    {
      while (m % i == 0 && n % i == 0)
      {
            a = a * i;
      }

    }
    printf("最大公因数为%d\n", a);
    return 0;
}

isdkz 发表于 2023-11-9 15:25:48

问题出在while循环中的逻辑错误。在循环中,应该将m和n分别除以i,而不仅仅是判断是否能整除。此外,还需要将a除以i,以便计算最大公因数。

以下是修正后的代码:

#include<stdio.h>

int main()
{
    int a = 1, m = 0, n = 0, i = 2;
    scanf("%d%d", &m, &n);
    for (i = 2; i <= m && i <= n; i++)
    {
      while (m % i == 0 && n % i == 0)
      {
            a = a * i;
            m = m / i;
            n = n / i;
      }
    }
    printf("最大公因数为%d\n", a);
    return 0;
}


修正后的代码将m和n分别除以i,并更新a的值。这样,当循环结束时,a的值就是最大公因数。

jackz007 发表于 2023-11-9 16:36:12

         此题用辗转相除法非常简单,楼主可以试一下:
#include<stdio.h>

int main(void)
{
      int i , m , n                  ;
      scanf_s("%d%d" , & m , & n)      ;
      for (; n ;) {
                i = m % n                ;
                m = n                  ;
                n = i                  ;
      }
      printf("最大公因数为:%d\n", m);
      return 0                         ;
}
页: [1]
查看完整版本: 最大公因数