題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
做這道題時,特意去查看了一下什么是最大公約數和最小公倍數.
后來直接去看了求解的思想,相信到企業中不會要求你閉門造車,若已有先例,可以研究之后拿來使用.
具體的思想是這樣的:
1>使兩個數,m大於n
2>m%n 若結果為0,那么n就是最大公約數
若結果不為0,那么就要讓n%(m%n).
寫到這邊就會發現,這又是一道關於遞歸的思想的問題.每次的運算都和上一次的運算的結果有關.
因此代碼如下.
1 //遞歸算法 2 public static int maxCommonDivisor(int m, int n){ 3 if(m < n){ 4 int temp = m; 5 m = n; 6 n = temp; 7 } 8 if(m % n == 0){ 9 return n; 10 }else{ 11 return maxCommonDivisor(n, m%n); 12 } 13 14 }
下面的這一種寫法,和遞歸的思想實質上是一致的.采用了循環的形式.
1 //循環法 2 public static int maxCommonDivisor2(int m, int n){ 3 if(m < n){ 4 int temp = m; 5 m = n; 6 n = temp; 7 } 8 while(m % n != 0){ 9 int temp = m % n; 10 m = n; 11 n = temp; 12 } 13 return n; 14 }
最后,在求得最大公約數的基礎上,最小公倍數很容易求得.
是m和n的乘積再除以最大公約數
1 public static int minCommonMultiple(int m, int n){ 2 return m*n/maxCommonDivisor2(m, n); 3 4 }
大神真的有很多,以上的代碼寫的很規范,包括命名(不是我起的),很專業.對於我的學習很有幫助.