题目形容
问题剖析
明天这题比较简单,一行代码就解决了,思路其实简略,就是判断下以后数的奇偶性,如果是偶数,那么最小公倍数必定就是数自身;如果是奇数,那么就是两个数的乘积。
当然,还有一个更艰深的做法,就是依据 "最大公约数和最小公倍数的乘积等于两数乘积" 的关系进行求解,通过欧几里得办法求出最大公约数,最小公倍数也就求进去了,然而,针对这个题这就显得有点麻烦了,晓得就好。
代码实现
//1. 通过判断奇偶性求解class Solution {public: int smallestEvenMultiple(int n) { return ((n & 1) == 0) ? n : n * 2; }};
//2. 通过最大公约数,最小公倍数关系求解class Solution {public: int gcd(int a, int b) { // 求最大公约数 if (a < b) swap(a, b); // 保障a大于等于b while (b != 0) { int r = a % b; a = b; b = r; } return a; } int lcm(int a, int b) { // 求最小公倍数 return a * b / gcd(a, b); } int smallestEvenMultiple(int n) { return lcm(2, n); }};