c语言求调用gbs最小公倍数,YTU 1047:C语言习题5.9–求两个整数的最大公约数和最小公倍数...

题目描述

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

输入

两个数

输出

最大公约数 最小公倍数

样例输入

6 15

样例输出

3 30

提示

主函数已给定如下,提交时不需要包含下述主函数

/* C代码 */

int main()

{

int n,m,gys,gbs;

int gcd(int a, int b);

int lcm(int a, int b);

scanf("%d%d",&n,&m);

gys=gcd(n,m);

gbs=lcm(n,m);

printf("%d %d\n",gys,gbs);

return 0;

}

/* C++代码 */

int main()

{

int n,m,gys,gbs;

int gcd(int a, int b);

int lcm(int a, int b);

cin>>n>>m;

gys=gcd(n,m);

gbs=lcm(n,m);

cout<

return 0;

}

题解

公约数要用到辗转相除法(欧几里得算法),熟悉的可以直接用递归简单完成,不熟悉的可以凭借下面这张算法图一步步实现。

http://c.biancheng.net/view/507.html

20191101_ytuoj1047_1.png

至于最小公倍数,以两数中较大的一方为最小值,两数的乘积为最大值,一步步for循环暴力往上加就完事了。

#include

using namespace std;

int gcd(int a, int b) //gcd:greatest common divisor 最大公约数

{

//辗转相除法

int tmp=0,bcs,cs; //bcs 被除数 cs除数

if(a == b){return b;}

else{

if(a>b){bcs=a;cs=b;} else{bcs = b;cs = a;}

tmp = bcs%cs;

while(tmp!=0)

{

bcs = cs;

cs = tmp;

tmp = bcs%cs;

}

return cs;

}

}

int lcm(int a, int b) //lcm:lowest common multiple 最小公倍数

{

int max1,max2,i,result;

if(a == b){return b;}

else

{

if(a>b){max1 = a;}else{max1 = b;}

max2 = a*b;

for(i = max1;i <= max2;i++)

{

if((i%a == 0)&&(i%b == 0)){result = i;break;}

}

return result;

}

}

int main()

{

int n,m,gys,gbs;

int gcd(int a, int b);

int lcm(int a, int b);

cin>>n>>m;

gys=gcd(n,m);

gbs=lcm(n,m);

cout<

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值