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);
}
}
댓글남기기