最小公倍数:
解题思路:
对于a,b两个数最小公倍数来说,a可以从b中寻找到自己的倍数,或者b可以从a中寻找到到自己的倍数,但是他们的倍数一定不超过ab,因此从1开始a %b,最先出现的结果为0的数一定就是他们之间的最小公倍数,但是比如a在b中寻找自己的倍数的过程时,寻找的倍数的范围都已经超过了b或者等于b,那么b中就没有发现a的倍数,那么他们的最小公倍数就是他们的乘积
代码实现
int min(int a,int b)
{
if(a<=0||b<=0)
return -1;
for(i=1;i<b;i++)
{
if((i*a)%b==0)
return i*a;
}
return b*a;
}
使用递归算法
代码实现
int min(int a,int b)
{
if(b==0)
return a;
else
return min(b,a%b);
}
最大公约数
解题思路
采用欧几里得算法也就是辗转相除法,也就是比如a不能被b整除,那么下一次将上一次的除数作为这次的被除数,将上一次的余数作为下一次的除数,一直循环,直到他们之间的余数为0,此时的除数就是他们的最大公约数
代码实现
int max(int a,int b)
{
int r;
if(a<=0||b<=0)
return -1;
do
{
r=a%b;
a=b;
b=r;
}while(r!=0);
return a;
}
但是我更喜欢用递归的方法解决这类问题
代码实现
int max(int a,int b)
{
if(a<=0||b<=0)
return -1;
if(a%b==0)
return b;
else
return max(b,a%b);
}
可以发现这样的代码量简化了很多