#include "stdio.h"
main()
{
int x,y,ACD,amd,t;/* 定义变量,acd 保存最大公约数,amd 保存最小公倍数 */
int acd(x,y);
printf("请输入两个数:\n"); /* 提示输入 */
scanf("%d,%d",&x,&y);
if(x>y) /* 如果 x>y,两个值互换,保证第一个参数为小值 */
{ t=x;x=y;y=t; }
ACD=acd(x,y); /*调用函数求最大公约数*/
amd=(x*y)/ACD; /*求最小公倍数*/
printf("最大公约数=%d,最小公倍数=%d",ACD,amd);
}
/*函数功能:使用辗转相除法求两个数的最大公约数
参数 m1:两个数中较小者
参数 m2:两个数中较大者
返回值:m1 和 m2 的最大公约数*/
int acd(int m1,int m2)
{
int r;
while(r!=0) /*使用辗转相除法求最大公约数*/
{ r=m2%m1;
m2=m1;
m1=r; }
return (r); /*返回最大公约数*/
}
求解
acd函数怎么会是return r呢???根据while条件,r的结局必然是0,否则死循环。你return 0,那么amd = (x*y)/ACD就会产生分母为0的异常。崩溃了
应该return m2吧
你输入的时候也是两个数中间打了逗号么,输入格式要与scan中填写的格式一致