关于求最大公约数的程序

#include<stdio.h>
int main()
{
int n,m,i,x;
scanf("%d,%d",&m,&n);
if(n>=m)
x=m;
else
x=n;
for(i=x;i>=1;i--)
{
if (m%i==0&&n%i==0)
{
printf("%d",i);
break;
}
}
return 0;
}
这个程序能正常运行 例如我输入81和27 ,得到27 但是少了break之后运行出来的结果变成了两万多 ,我想知道为什么少了break 不能跳出循环之后 数字会变到两万多

不加 break;就是输出两个数的所有公约数,不是结果有两万多,是输出时没有空格,所有输出连在一起了27931,其实是 27 9 3 1 ,printf("%d\n",i); 这么改下就看得出来了。

是27,9,3,1这几个数字叠在一起了
你在输出后面加入\n就能看到可读的输出结果了
有帮助望采纳~

img

不是两万多,是你循环输出了多组数据,比如27,9,3,1之类的。一种是break,只输出最大的那个就结束,不要循环了;二是printf("%d\n",i);换个行你就知道有多少个公约数了