下午闲着无聊,随便拿一道题来练练,下面我就跟大家讲讲又简单到复杂的写法
最小公因数:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
简单写法:
private static int gcd(int a, int b) {
return (b == 0) ? a : gcd(b, a % b);
}
复杂写法:
static int gcd(int x, int y) {
int i;
if (x < y) {
x = x + y;
y = x - y;
x = x - y;
}//取两个数中最大的数做除数,较小的数做被除数
while ((x % y) != 0) {
i = x % y;
y = i;
}
return y;
}
简单写法解析:(条件)?(A) :(B) ,这里如果满足条件的话就会输出A,反之继续执行B
另外一个有趣的点就是这个地方,这里我自己之前也一直搞不懂能保证是大的数是除数。
后来我自己动手演算了一下:假设a是10,b是9,那么%的计算结果其实是0然后余数为10,那么在第二轮循环中就变成了a就变成了10,a%b也就变成了10%9,实现大的数是除数。如果a本身是大的数这里我就不废话了,直接代入计算你就能理解了。
复杂写法解析: 这里说是复杂写法其实写的很明白了,if就是保证传输到下面的数据是大的数为除数,小的为被除数。
while循环中(表达式)为true循环体一直会一直执行,直到表达式为false则跳出循环。
基本上如果你能理解上面这两个点这道题也就能随便写了。
无聊写写的,比较适合新手,大佬勿喷,喜欢的可以点下赞,谢谢!