#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); /*返回最大公约数*/
}
求解
求公约数公倍数问题 程序不报错 输出数据后按回车没有响应
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- CSDN专家-link 2021-11-28 16:05关注
acd函数怎么会是return r呢???根据while条件,r的结局必然是0,否则死循环。你return 0,那么amd = (x*y)/ACD就会产生分母为0的异常。崩溃了
应该return m2吧本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录