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

-------------------- ######## --------------------

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 temp2 = 56.

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();
}
Đoạn code này dùng trong trường hợp số bạn nhập vào không thỏa mãn điều kiện > 0 thì chương trình sẽ yêu cầu bạn nhập lại. Hình minh họa như sau:

 

Nguồn: freetuts.net