赞
踩
辗转相除法求出最大公约数思路:
假设两个数字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代表错误,正常返回最小公倍数
具体代码实现如下:
- #include <stdio.h>
-
- /* 最大公约数 */
- /* 返回最大公约数,返回0代表错误 */
- unsigned int GreatestCommonDivisor(unsigned int a,unsigned int b){
-
- unsigned int c;
-
- if( a == 0 && b != 0 ){
- return b;
- }else if( a != 0 && b == 0 ){
- return a;
- }else if( a == 0 && b == 0 ){
- printf("err:both input data are '0'\n");
- return 0;
- }else{
- while(1){
- c = a % b;
- if(c == 0){
- return b;
- }else{
- a=b;
- b=c;
- }
- }
- }
- }
-
- /* 最小公倍数 */
- /* 返回最小公倍数,返回0代表错误 */
- unsigned int LeastCommonMultiple(unsigned int a,unsigned int b){
-
- if( a == 0 || b == 0){
- printf("err:input data have '0'\n");
- return 0;
- }else{
- return (a * b / GreatestCommonDivisor(a,b));
- }
- }
- int main(){
-
-
- printf("GCD:%d\n",GreatestCommonDivisor(20,30));
- printf("LCM:%d\n",LeastCommonMultiple(30,20));
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。