函数之最大公约数和最小公倍数

26 篇文章 0 订阅
7 篇文章 0 订阅

         Problem A: 求两个整数的最大公约数和最小公倍数

Description

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

Input

两个数

Output

最大公约数 最小公倍数

#include <iostream>

using namespace std;

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<<gys<<' '<<gbs<<endl;

    return 0;

}

int lcm(int a,int b)

{

int h,l;

int gcd(int,int);

{h=gcd(a,b);

l=a*b/h;

return l;}

}

int gcd(int a,int b)

{

int s,t;

if(b>a)

{s=a;a=b;b=s;}

while((t=a%b)!=0)

{a=b;

b=t;}

return b;

}

这个题


目的难点在于求最大公约数和最小公倍数的数学方法,通常情况下,先用辗转相除法(用较大数除以较小数,再以较小数做被除数,得到的余数做除数,如此循环,直到得到的余数为0时,除数即上一步的余数就是最大公约数)求出最大公约数,在通过最大公约数间接求最小公倍数(两个数相乘,得到的积除以他们的最大公约数就可以得到最小公倍数);题目还考察自定义函数,对于自定义函数,如果自定义函数在主函数之后,那么主函数中要调用自定义函数,相反,如果自定义函数在主函数之前,那么主函数中不必调用自定义函数,直接用即可;

先自定义求最大公约数的函数(int gcd(int a,int b)),为了保证大数做被除数,小数做除数,当他们的位置相反时(if(b>a)),将他们换过来(s=a;a=b;b=s;),然后用辗转相除法求出最大公约数(while((t=a%b)!=0)  {a=b; b=t;})

在求最大公约数的函数之前定义求最小公倍数的函数(int lcm(int a,int b)),所以要调用求最大公约数的函数(int gcd(int,int);),如果求最小公倍数的函数在求最大公约数的函数之后,就不用调用了;在调用完之后,求出两个数的最大公约数(h=gcd(a,b);),利用最大公约数求出最小公倍数(l=a*b/h;)

主函数在最前面(int main()),调用两个自定义函数(int gcd(int a, int b);  int lcm(int a, int b);),输入数据之后(cin>>n>>m;),用自定义函数计算(gys=gcd(n,m);  gbs=lcm(n,m);)

按要求输出结果(cout<<gys<<' '<<gbs<<endl;)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值