Java基礎語法題(06):求最小公倍數和最大公約數

題目描述:

輸入兩個正整數m和n,求其最大公約數和最小公倍數。

頭條的這個代碼高亮讓人無力吐槽......


<code>    package Demo06GCD;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Greatest_Common_Divisor {
/**
* 輸入兩個正整數m和n,求其最大公約數和最小公倍數。
*/
/*
分析:最大公約數指兩個或多個整數共有約數中最大的一個。
常見的求最大公約數有多種方法有質因數分解法、短除法、輾轉相除法、更相減損法。
這幾種方法都是數學方法,在瞭解了其原理之後,用計算機編程語言來完成,就簡單了,
我選一個咱國產的:更相減損法,該方法的操作是:
可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。
*/
public static void main(String[] args) {
// 通過Scanner對象來獲取用戶輸入
while (true) {
int num1 = 0;
int num2 = 0;
try {
System.out.println("請輸入第一個數:");
Scanner sc = new Scanner(System.in);
num1 = sc.nextInt();
System.out.println("請輸入第二個數;");

num2 = sc.nextInt();
// 判斷兩個數的大小,分別裝到big和small變量裡面
int big = 0;
int small = 0;
if (num1 < num2) {
small = num1;
big = num2;
} else if (num1 > num2) {
small = num2;
big = num1;
} else {
System.out.println("輸入有誤,請重新輸入……");
}
int halfs = 1;
int flag = 0;
// 如果兩個數是偶數,則除以2,一直除到有一個不是偶數為止
while (big % 2 == 0 && small % 2 == 0) {
big /= 2;
small /= 2;
halfs *= 2;
}
// 減損,拿大數減小數,一直減到減數等於差
while (big - small > 0) {
flag = big - small;
big = flag > small ? flag : small;
small = flag < small ? flag : small;
}
// 返回最大公約數,即halfs*flag
System.out.println("您輸入的兩個數的最大公約數為:" + (halfs * flag));
} catch (InputMismatchException e) {
System.out.println("您輸入的數據有誤,請輸入輸入數字:");
}
}
}
}/<code>


分享到:


相關文章: