자바 가 실현 한 전형 적 인 로마 숫자 와 아랍 숫자 의 상호 전환 문제 예제
고대 로마 제국 은 눈 부신 인류 문명 을 열 었 으 나 그들의 숫자 표현 법 은 확실히 좀 번 거 로 웠 다.특히 대 수 를 표시 할 때 지금 은 정말 참 을 수 없 을 것 같 아서 현대 에 서 는 거의 사용 되 지 않 았 다.그 이 유 는 표현법 을 발명 한 사람의 지적 문제 가 아니 라 한 종교 의 원인 으로 인해 그 당시 의 종 교 는 숫자 에서 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;
}
}
실행 결과:자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.