最大公因数
运行不报错,但输入数字后按回车没反应#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;
} 问题出在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的值就是最大公因数。 此题用辗转相除法非常简单,楼主可以试一下:
#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]