atoi & itoa

Seongmin·2022년 10월 6일
0

알고리즘

목록 보기
3/8
public class AtoiItoa {
	public static int atoi(String text) {
		int value = 0;
		boolean negativeFlag = false;
		if(text.charAt(0) == '-') {
			negativeFlag = true;
		} else {
			value += text.charAt(0) - '0';
		}
		for (int i = 1; i < text.length(); i++) {
			char num = text.charAt(i);
			int digit;
			if ('0' <= num && num <= '9') {
				digit = num - '0';
			} else {
				break;
			}
			value = (value * 10) + digit;
		}
		return negativeFlag? value * (-1) : value;
	}

	public static String itoa(int num) {
		StringBuilder sb = new StringBuilder();

		if (num < 0) {
			num *= -1;
			sb.append('-');
		}

		for (int i = (int) Math.log10(num); i >= 0; i--) {
			int log = (int) Math.log10(num);
			int toAdd = num / (int) Math.pow(10, log);
			sb.append((char) (toAdd + '0'));
			num -= toAdd* ((int) Math.pow(10, log));
		}

		return sb.toString();
	}

	public static void main(String[] args) {
		System.out.println(atoi("2468") * 2);  // 4936
		System.out.println(atoi("-2468") * 2);  // -4936
		System.out.println(itoa(1234) + 'a');  // 1234a
		System.out.println(itoa(-1234) + 'a');  // -1234a
	}
}

숫자로 이루어진 String을 integer 자료형으로, integer를 String으로 바꿔주는 메서드이다. Integer.toString, Integer.parseInt 메서드가 이미 존재하지만, itoa와 atoi를 직접 구현해보았다.

상세 설명

public static int atoi(String text) {
		int value = 0;
		boolean negativeFlag = false;
		if(text.charAt(0) == '-') {
			negativeFlag = true;
		} else {
			value += text.charAt(0) - '0';
		}
		for (int i = 1; i < text.length(); i++) {
			char num = text.charAt(i);
			int digit;
			if ('0' <= num && num <= '9') {
				digit = num - '0';
			} else {
				break;
			}
			value = (value * 10) + digit;
		}
		return negativeFlag? value * (-1) : value;
	}

만일 첫 문자가 '-'일 경우 negativeFlag를 true로 바꾸어 나중에 음수로 출력시켜준다.
문자열을 하나씩 읽어가면서, 숫자를 하나씩 더한 후 10을 곱해주는 식으로 return값을 구성하였다.

public static String itoa(int num) {
		StringBuilder sb = new StringBuilder();

		if (num < 0) {
			num *= -1;
			sb.append('-');
		}

		for (int i = (int) Math.log10(num); i >= 0; i--) {
			int log = (int) Math.log10(num);
			int toAdd = num / (int) Math.pow(10, log);
			sb.append((char) (toAdd + '0'));
			num -= toAdd* ((int) Math.pow(10, log));
		}

		return sb.toString();
	}

itoa는 StringBuilder에 숫자를 하나씩 읽어가며 append해주었다. 만일 음수일 경우에는 맨 앞에 '-'를 추가해준다.

	public static void main(String[] args) {
		System.out.println(atoi("2468") * 2);  // 4936
		System.out.println(atoi("-2468") * 2);  // -4936
		System.out.println(itoa(1234) + 'a');  // 1234a
		System.out.println(itoa(-1234) + 'a');  // -1234a
	}
}

정상적으로 잘 작동한다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN