Java에서 Romain 숫자를 정수로 변환하는 방법

로마 숫자는 고대 로마에서 사용되었습니다. 라틴 알파벳에서 I는 1, V는 5, X는 10, L은 50, C는 100, D는 500, M은 1000의 7자로 구성됩니다. 숫자는 모든 문자의 합이며 가장 높은 숫자에서 가장 낮은 숫자로 기록됩니다. 예외가 있습니다. 현재 숫자 앞에 더 작은 숫자가 쓰여지면 그 값은 두 번째 숫자에서 제거됩니다. 예를 들어, 로마자 IV는 문자 I이 V보다 작고 먼저 쓰여지기 때문에 5입니다.

로메인 숫자를 변환하는 알고리즘은 마지막 문자에서 문자열을 구문 분석하여 합계에 더하고 이전 문자를 유지합니다. 현재 문자가 이전 문자보다 작으면 합계에서 제거됩니다. 합계가 출력으로 반환됩니다.

다음 java 파일을 만듭니다.

public class RomainNumbers {
    enum RN {
        I(1), V(5), X(10), L(50), C(100), D(50), M(1000);

        int nb;

        RN(int i) {
            this.nb = i;
        }
    }

    public static int convertROMNumber(String input) {
        int i = input.length() - 1;
        int previous = 0;
        int toReturn = 0;
        while (i >= 0) {
            char c = input.charAt(i);
            int currentValue = RN.valueOf(String.valueOf(c)).nb;

            if (currentValue < previous)
                toReturn -= currentValue;
            else
                toReturn += currentValue;

            previous = currentValue;
            i--;
        }

        return toReturn;
    }

    public static void main(String[] args) {
        String[] tab = {"III", "IV", "VI", "XIV"};
        for (String current : tab) {
            System.out.println(current + " => " + convertROMNumber(current));
        }
    }

}

출력은 다음과 같습니다.

III => 3
IV => 4
VI => 6
XIV => 14

문자열의 끝에서 시작하여 이전 문자를 유지함으로써 모든 문자에 대해 다음 문자를 계속 테스트할 필요가 없습니다.

참고 문헌 :

Roman numerals

최근 댓글