Doit! 알고리즘 (5)

업데이트:


chap02-06

package chap02;
import java.util.Scanner;

public class Q6 {

	static int cardConv(int x, int r, char[] d) {
		int digits = 0;
		String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		
		do {
			d[digits++] = dchar.charAt(x % r);
			x /= r;
		}while(x != 0);
		
		for(int i = 0; i < digits/2; i++) {
			char temp = d[i];
			d[i] = d[digits - i -1];
			d[digits - i -1] = temp;
		}
		return digits;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int no, cd, dno; // no(정수), cd(기수), dno(변환 후 자릿수)
		char[] cno = new char[32];
		
		System.out.println("10진수를 기수 변환합니다.");
		do {
			System.out.print("변환하는 음이 아닌 정수 : ");
			no = sc.nextInt();
		}while(no < 0);
		
		do {
			System.out.print("어떤 진수로 변환할까요? : ");
			cd = sc.nextInt();
		}while(cd < 2 || cd > 32);
		
		dno = cardConv(no, cd, cno);
		
		for(int i = 0; i < dno; i++) {
			System.out.print(cno[i]);
		}
		System.out.println("입니다.");
	}
}



chap02-07

package chap02;
import java.util.Scanner;

class Q7 {
	static int cardConvEx(int x, int r, char[] d) {
		int n = ((Integer) x).toString().length(); 
		int digits = 0;
		String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

		System.out.printf(String.format("%%2d | %%%dd\n", n), r, x);
		do {
			System.out.printf("   +");
			for (int i = 0; i < n + 2; i++)
				System.out.print('-');
			System.out.println();

			if (x / r != 0)
				System.out.printf(String.format("%%2d | %%%dd    … %%d\n", n), r, x / r, x % r);
			else
				System.out.printf(String.format("     %%%dd    … %%d\n", n), x / r, x % r);
			d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
			x /= r;
		} while (x != 0);

		for (int i = 0; i < digits / 2; i++) { // d[0]~d[digits-1]
			char temp = d[i]; // 를 역순으로 정렬
			d[i] = d[digits - i - 1];
			d[digits - i - 1] = temp;
		}
		return digits;
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int no; // 변환하는 정수
		int cd; // 기수
		int dno; // 변환 뒤의 자릿수
		int retry; // 한 번 더?
		char[] cno = new char[32]; // 변환 뒤의 각 자리를 저장하는 문자 배열

		System.out.println("10진수를 기수변환합니다.");
		do {
			do {
				System.out.print("변환하는 음이 아닌 정수:");
				no = stdIn.nextInt();
			} while (no < 0);

			do {
				System.out.print("어떤 진수로 변환할까요? (2~36):");
				cd = stdIn.nextInt();
			} while (cd < 2 || cd > 36);

			dno = cardConvEx(no, cd, cno); 

			System.out.print(cd + "진수로는 ");
			for (int i = 0; i < dno; i++) 
				System.out.print(cno[i]);
			System.out.println("입니다.");

			System.out.print("한번 더 할까요? (1.예/0.아니오):");
			retry = stdIn.nextInt();
		} while (retry == 1);
	}
}



chap02-08

package chap02;
import java.util.Scanner;

public class Q8 {
	static int[][] mdays = {
			{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},	// 평년
			{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}	// 윤년
		};
	
	static int isLeap(int y) {
		return (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)? 1 : 0;
	}
	
	static int dayOfYear(int y, int m, int d) {
		while(--m != 0) {
			d += mdays[isLeap(y)][m-1];
		}
		return d;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int retry;
		
		System.out.println("그 해 경과 일 수를 구함");
		
		do {
			System.out.print("년 : "); int year = sc.nextInt();
			System.out.print("월 : "); int month = sc.nextInt();
			System.out.print("일 : "); int day = sc.nextInt();
			
			System.out.printf("그 해 %d일째 입니다.\n", dayOfYear(year, month, day));
			
			System.out.print("한 번 더 할까요? (1. 예 / 0. 아니오) : ");
			retry = sc.nextInt();
		}while(retry == 1);
	}
}



chap02-09

package chap02;
import java.util.Scanner;

public class Q9 {
	static int[][] mdays = {
			{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},	// 평년
			{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}	// 윤년
		};
	
	static int isLeap(int y) {
		return (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)? 1 : 0;
	}
	
	static int leftDayOfYear(int y, int m, int d) {
		int days = 0;
		
		for(int i = m; i <= 12; i++) {
			days += mdays[isLeap(y)][i-1];
		}
		return days - d;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int retry;
		
		System.out.println("그 해 경과 일 수를 구함");
		
		do {
			System.out.print("년 : "); int year = sc.nextInt();
			System.out.print("월 : "); int month = sc.nextInt();
			System.out.print("일 : "); int day = sc.nextInt();
			
			System.out.printf("그 해는 %d일 남았습니다.\n", leftDayOfYear(year, month, day));
			
			System.out.print("한 번 더 할까요? (1. 예 / 0. 아니오) : ");
			retry = sc.nextInt();
		}while(retry == 1);
	}
}



태그:

카테고리:

업데이트:

댓글남기기