고대 로마 숫자 10 진법

문제 설명
고대 로마 제국 은 눈 부신 인류 문명 을 열 었 으 나 그들의 숫자 표현 법 은 확실히 좀 번 거 로 웠 다. 특히 대 수 를 나 타 낼 때 
    
지금 은 도저히 참 을 수 없 을 것 같 아서 현대 에 서 는 거의 사용 되 지 않 는 다.그 이 유 는 표현법 을 발명 한 사람의 지능 문제 가 아니 라 
   
한 종교 때문에 그 당시 의 종 교 는 숫자 에 0 이라는 개념 이 나타 나 는 것 을 금지 했다! 
   
로마 숫자의 표 시 는 주로 다음 과 같은 몇 가지 기본 기호 에 의존한다. 
    I  1
    V  5
    X  10
    L  50
    C  100
    D  500
    M  1000
   
여기 서 우 리 는 1000 이내 의 숫자의 표현법 만 소개 한다. 
   
한 기호 가 몇 번 반복 되 는 지 는 몇 배 를 나타 낸다.최대 3 회 반복. 
        
CCC  XX 표시 20,    그러나 150 은 LLL 로 표시 하지 않 고 이 규칙 은 I X C M 에 만 적용 된다. 
   
만약 에 인접 등급 의 큰 단위 가 오른쪽 에 있 고 작은 단위 가 왼쪽 에 있 으 면 큰 단위 에서 작은 단 위 를 공제 하 는 것 을 나타 낸다. 
       
IX  IV 표시 4  XL 은 40 더 많은 예 시 를 다음 표를 참조 하 라 고 표시 합 니 다. 당신 은 규칙 을 찾 았 습 니까? 
I,1 
II
,2
III
,3
IV
,4
V
,5
VI
,6
VII
,7
VIII
,8
IX
,9 
X
,10
XI
,11
XII
,12
XIII,13
XIV,14
XV,15
XVI,16
XVII,17
XVIII,18
XIX,19
XX,20
XXI,21
XXII,22
XXIX,29
XXX,30
XXXIV,34
XXXV,35
XXXIX,39
XL,40
L,50
LI,51
LV,55
LX,60
LXV,65
LXXX,80
XC,90
XCIII,93
XCV,95
XCVIII,98
XCIX,99
C,100
CC,200
CCC,300
CD,400
D,500
DC,600
DCC,700
DCCC,800
CM,900
CMXCIX,999
   
이 문제 의 요 구 는 프로그램 을 작성 하 십시오. 사용자 가 몇 개의 로마 숫자 문자열 을 입력 하고 프로그램 출력 에 대응 하 는 10 진법 으로 표시 하 십시오. 
   
입력 형식 은 첫 번 째 줄 은 정수 n 으로 다음 에 n 개의 로마 숫자 (n < 100) 가 있 음 을 나타 낸다. 
   
앞으로 줄 마다 로마 숫자.    로마 의 숫자 크기 는 999 를 초과 하지 않 는 다. 
   
프로그램 출력 n 줄 을 요구 하 는 것 은 로마 숫자 에 대응 하 는 10 진 데이터 입 니 다. 
   
예 를 들 어 사용자 입력: 
3
LXXX
XCIII
DCCII
   
프로그램 이 출력 해 야 합 니 다: 
80
93
702
자바 코드 구현
package mec.lanqiao;

import java.util.Scanner;

public class Main {
     //           
     static int getValue(char c) {
          int re = -1;
          switch (c ) {
          case 'I' :
               re = 1;
               break;
          case 'V' :
               re = 5;
               break;
          case 'X' :
               re = 10;
               break;
          case 'L' :
               re = 50;
               break;
          case 'C' :
               re = 100;
               break;
          case 'D' :
               re = 500;
               break;
          case 'M' :
               re = 1000;
               break;
          default:
               break;
         }
          return re ;
     }

     static int switchToDecimal(String romanNum ) {
          int result = 0; //      
          for (int i = 0; i < romanNum .length() - 1; i++) {
               //         
               char a = romanNum .charAt(i );
               char b = romanNum .charAt(i + 1);
               if (getValue( a) < getValue(b)) { //     
                   result -= getValue(a);
              } else {
                   result += getValue(a);
              }
         }
          //         
          result += getValue(romanNum.charAt( romanNum.length() - 1));
          return result ;
     }

     public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);
          int n = scan .nextInt();
         String[] romanNums = new String[n ];
          for (int i = 0; i < n ; i ++) {
               romanNums[i ] = scan .next();
         }
          scan.close();
          for (int i = 0; i < romanNums .length ; i ++) {
              System. out.println(switchToDecimal( romanNums[i ]));
         }
     }
}

좋은 웹페이지 즐겨찾기