30/09/2018, 20:32

Hỏi về đổi cơ số trong java

E đang làm bài tập java và gặp chút " khó hiểu " trong đoạn code, các anh chị nào có thể phân tích cho e 1 chút được không ạ!!!

public static void doiCoSo(int n,int base){
    if(n>=base) doiCoSo(n / base, base);
    if(n % base>9) System.out.printf("%c",n%base+55);   
    else
    System.out.print((n % base));
}
public static int nhap(){
	Scanner input= new Scanner(System.in);
	boolean check= false;
	int n=0;
	while(!check){
		System.out.print(" ");
		try{
			n= input.nextInt();
			check= true;
		}catch(Exception e){
			System.out.println("Ban phai nhap so! hay nhap lai...");
			input.nextLine();
		}
	}
	return (n);
}
public static void main(String[] args) {
            System.out.println("Nhap n");
	int n= nhap();
	System.out.println("Nhap vao co so can chuyen sang b");
	int b= nhap();
	System.out.println("So " +n+ " chuyen sang co so " +b+ " thanh: ");
	doiCoSo(n,b);

Như đoạn code ở trên, với hàm “doiCoSo” ,e chưa hiểu lắm về cách chuyển đổi cơ số bất kì là như thế nào ạ! , theo e được biết là nếu muốn đổi từ hệ cơ số 10 sang hệ cơ số 2 thì ta lấy số đó(hệ 10) chia cho 2, kết quả sẽ là các số dư lấy từ dưới lên…cái "khó hiểu " ở đây của e là tại sao hok có sự sắp xếp mảng ngược lại mà vẫn hiển thị ra được kết quả ???

Trịnh Minh Cường viết 22:38 ngày 30/09/2018

public static void doiCoSo(int n,int base){
if(n>=base) doiCoSo(n / base, base);
if(n % base>9) System.out.printf("%c",n%base+55);
else
System.out.print((n % base));
}

Vì nó là đệ quy cho nên kết quả sẽ không cần phải sắp xếp ngược lại bạn nhé. Còn nếu như bạn dùng vòng lặp để đổi thì bạn phải duyệt ngược lại để lấy kết quả.

JohnnyTang viết 22:48 ngày 30/09/2018

ah, e chưa nghiên cứu đệ qui, để e xem lại,cám ơn nhiều ạ:blush:

Đạt Đỗ viết 22:39 ngày 30/09/2018

có thể dùng Integer.parseInt(“444”,base);

Bài liên quan
0