当前位置:   article > 正文

3.C_Demo_最大公约数、最小公倍数

3.C_Demo_最大公约数、最小公倍数

辗转相除法求出最大公约数思路:

假设两个数字a和b,求两个数字相除的余数c=a%b,如果余数为0,则b为最大公约数。如果b不为零,a=b,b=c,继续循环计算

最小公倍数思路:

两个数的最小公倍数数等于两个数的乘积除以两个数的最大公约数。即:x,y的最小公倍数 min(公倍数)=x*y÷max(公约数)

代码接口说明如下:

1、unsigned int GreatestCommonDivisor(unsigned int a,unsigned int b);

功能:求a,b最大公约数

参数a,b:传入的两个数值,不能全为0

返回值:0代表错误,正常返回最大公约数

2、unsigned int LeastCommonMultiple(unsigned int a,unsigned int b);

功能:求a,b最小公倍数

参数a,b:传入的两个数值,两个数都不能为0

返回值:0代表错误,正常返回最小公倍数

具体代码实现如下:

  1. #include <stdio.h>
  2. /* 最大公约数 */
  3. /* 返回最大公约数,返回0代表错误 */
  4. unsigned int GreatestCommonDivisor(unsigned int a,unsigned int b){
  5. unsigned int c;
  6. if( a == 0 && b != 0 ){
  7. return b;
  8. }else if( a != 0 && b == 0 ){
  9. return a;
  10. }else if( a == 0 && b == 0 ){
  11. printf("err:both input data are '0'\n");
  12. return 0;
  13. }else{
  14. while(1){
  15. c = a % b;
  16. if(c == 0){
  17. return b;
  18. }else{
  19. a=b;
  20. b=c;
  21. }
  22. }
  23. }
  24. }
  25. /* 最小公倍数 */
  26. /* 返回最小公倍数,返回0代表错误 */
  27. unsigned int LeastCommonMultiple(unsigned int a,unsigned int b){
  28. if( a == 0 || b == 0){
  29. printf("err:input data have '0'\n");
  30. return 0;
  31. }else{
  32. return (a * b / GreatestCommonDivisor(a,b));
  33. }
  34. }
  35. int main(){
  36. printf("GCD:%d\n",GreatestCommonDivisor(20,30));
  37. printf("LCM:%d\n",LeastCommonMultiple(30,20));
  38. return 0;
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/929087
推荐阅读
  

闽ICP备14008679号