자바 가 실현 한 전형 적 인 로마 숫자 와 아랍 숫자 의 상호 전환 문제 예제

4280 단어 Java디지털 변환
이 글 은 자바 가 실현 한 전형 적 인 로마 숫자 와 아랍 숫자 가 서로 바 뀌 는 문 제 를 사례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
고대 로마 제국 은 눈 부신 인류 문명 을 열 었 으 나 그들의 숫자 표현 법 은 확실히 좀 번 거 로 웠 다.특히 대 수 를 표시 할 때 지금 은 정말 참 을 수 없 을 것 같 아서 현대 에 서 는 거의 사용 되 지 않 았 다.그 이 유 는 표현법 을 발명 한 사람의 지적 문제 가 아니 라 한 종교 의 원인 으로 인해 그 당시 의 종 교 는 숫자 에서 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

import java.util.Scanner;
/**
 *      ,             ,            。
 *
 *      :      n,      n     (n<100)。          。         999。
 *
 *       n ,              。
 *
 *   ,    : 3 LXXX XCIII DCCII
 *
 *        : 80 93 702
 *
 * @author Administrator
 *
 */
public class RomeToArabic {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("      :");
    Scanner mScanner = new Scanner(System.in);
    System.out.println(r2a(mScanner.nextLine()));
    System.out.println(a2r(mScanner.nextInt()));
  }
  /**
   *              
   *
   * @param m
   * @return
   */
  public static int r2a(String m) {
    int graph[] = new int[400];
    graph['I'] = 1;
    graph['V'] = 5;
    graph['X'] = 10;
    graph['L'] = 50;
    graph['C'] = 100;
    graph['D'] = 500;
    graph['M'] = 1000;
    char[] num = m.toCharArray();
    int sum = graph[num[0]];
    for (int i = 0; i < num.length - 1; i++) {
      if (graph[num[i]] >= graph[num[i + 1]]) {
        sum += graph[num[i + 1]];
      } else {
        sum = sum + graph[num[i + 1]] - 2 * graph[num[i]];
      }
    }
    return sum;
  }
  /**
   *              
   *
   * @param number
   * @return
   */
  public static String a2r(int number) {
    String rNumber = "";
    int[] aArray = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
    String[] rArray = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X",
        "IX", "V", "IV", "I" };
    if (number < 1 || number > 3999) {
      rNumber = "-1";
    } else {
      for (int i = 0; i < aArray.length; i++) {
        while (number >= aArray[i]) {
          rNumber += rArray[i];
          number -= aArray[i];
        }
      }
    }
    return rNumber;
  }
}

실행 결과:

자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기