Java - Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của 2 số nguyên dương.
Viết chương trình nhập vào 2 số nguyên dương, tìm và in ra màn hình ước số chung lớn nhất và bội số chung nhỏ nhất của 2 số nguyên dương nhập từ bàn phím.
Bài giải
-------------------- ######## --------------------
package vong_lap_while; import java.util.Scanner; public class TimUSCLNVaBSCNN { public static void main(String[] args) { int firstNumber, secondNumber, temp1, temp2, uscln, bscnn; Scanner scanner = new Scanner(System.in); System.out.println("Nhập vào số thứ nhất: "); firstNumber = scanner.nextInt(); System.out.println("Nhập vào số thứ hai: "); secondNumber = scanner.nextInt(); while ((firstNumber <= 0) || (secondNumber <= 0)) { System.out.println("Nhập lại hai số nguyên dương!"); System.out.println("Nhập vào số thứ nhất: "); firstNumber = scanner.nextInt(); System.out.println("Nhập vào số thứ hai: "); secondNumber = scanner.nextInt(); } // tìm ước số chung lớn nhất temp1 = firstNumber; temp2 = secondNumber; while (temp1 != temp2) { if (temp1 > temp2) { temp1 -= temp2; } else { temp2 -= temp1; } } uscln = temp1; System.out.println("Ước số chung lớn nhất của " + firstNumber + " và " + secondNumber + " = " + uscln); System.out.println("Bội số chung lớn nhất của " + firstNumber + " và " + secondNumber + " = " + ((firstNumber * secondNumber) / uscln)); } }
Kết quả sau khi biên dịch chương trình:
Giải thích hoạt động của chương trình trên: Trong chương trình này, tôi nhập vào hai số 8 và 16 thì trình biên dịch sẽ thực hiện các bước như sau:
Bước 1: Kiểm tra thấy hai số này thỏa mãn điều kiện là số nguyên dương nên bỏ qua phần kiểm tra while ((firstNumber <= 0) || (secondNumber <= 0))
và thực hiện các lệnh bên dưới.
Bước 2: Gán giá trị biến temp1 = 16
và temp2 = 56
.
Bài viết này được đăng tại [free tuts .net]
Bước 3: Kiểm tra điều kiện bên trong while: Vì 16 != 56
nên sẽ thực thi lệnh bên trong while
. Lúc này 16 < 56 nên lệnh bên trong else
sẽ được thực hiện và lúc này biến temp2 = 40
.
Bước 4: Quay lại bước 3, vì 16 != 40
nên sẽ thực thi lệnh bên trong while
. Lúc này 16 < 40 nên lệnh bên trong else
sẽ được thực hiện và lúc này biến temp2 = 24
.
Bước 5: Quay lại bước 3, vì 16 != 24
nên sẽ thực thi lệnh bên trong while
. Lúc này 16 < 24 nên lệnh bên trong else
sẽ được thực hiện và lúc này biến temp2 = 8
.
Bước 5: Quay lại bước 3, vì 16 != 8
nên sẽ thực thi lệnh bên trong while
. Lúc này 16 > 8 nên lệnh bên trong if
sẽ được thực hiện và lúc này biến temp2 = 8
.
Bước 6: Quay lại bước 3, lúc này while (temp1 != temp2)
sẽ trả về kết quả là sai. Lúc này vòng lặp kết thúc và ước số chung lớn nhất của 2 số này sẽ bằng 8.
Trong bài tập này, tôi có một đoạn code như sau:
while ((firstNumber <= 0) || (secondNumber <= 0)) { System.out.println("Nhập lại hai số nguyên dương!"); System.out.println("Nhập vào số thứ nhất: "); firstNumber = scanner.nextInt(); System.out.println("Nhập vào số thứ hai: "); secondNumber = scanner.nextInt(); }
Câu hỏi thường gặp liên quan:
- Java - Viết chương trình in ra các số chẵn nhỏ hơn hoặc bằng 20.
- Java - Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của 2 số nguyên dương.
- Java - Tính giai thừa của một số nguyên dương bất kỳ.
- Java - Viết chương trình tính tổng của bình phương các số.
- Java - Bài tập tính tiền taxi
- Java - Tính tổng các chữ số của một số nguyên.
- Java - Đếm số chữ số của một số nguyên dương.