求最大公约数的C++算法:
我整理了一下网上的思路和自己的代码,写下来就当自己的一个提醒。目前写了两种:
1.求最大公约数:
1>辗转相除法
int maxgy1(int a ,int b)
{
int c = a%b;
while (c != 0)
{
a = b; b = c; c = a%b;
}
return b;
}
2> 穷举法
int maxgy2(int a, int b)
{
int i;
int max = (a > b) ? a : b;
int min = (a > b) ? b : a;
if (max%min == 0)
return min;
else
{
for (i = min - 1; i >= 1; i--)
if ((max%i == 0) && (min%i == 0))
break;
}
return i;
}
当然,函数可以直接返回最大公约数,也可以直接输出,因为(a,b)[a,b]=ab ,所以[a,b]=ab/(a,b)
2.求最小公倍数
1>穷举法
int mingb(int a, int b)
{
int max = (a > b) ? a : b;
int min = (a > b) ? b : a;
int i=max-1;
do
{
i++;
} while (i%max != 0 || i%min != 0);
return i;
}
也是直接返回最小公倍数。短暂记录一下
坑:
用 do while 或者是 while 循环时,牢记while里面是条件,只要是符合的话,就可以执行循环。