leetcode Roman to Integer 로마 숫자 와 아랍 숫자 가 서로 바뀐다.

로마 숫자 규칙: 1. 로마 숫자 는 모두 7 개 로 I (1), V (5), X (10), L (50), C (100), D (500) 와 M (1000) 이다.로마 숫자 에는 0 이 없다.2, 반복 횟수: 로마 숫자 한 개 를 최대 3 회 반복 합 니 다.3. 오른쪽 에 왼쪽 을 더 하고 줄 이기: 비교적 큰 로마 숫자 오른쪽 에 작은 로마 숫자 를 기록 하면 큰 숫자 에 작은 숫자 를 더 하 는 것 을 나타 낸다.비교적 큰 로마 숫자의 왼쪽 에 비교적 작은 로마 숫자 를 기록 하면 큰 숫자 가 숫자 를 줄 이 는 것 을 나타 낸다.4. 왼쪽 에서 줄 인 숫자 는 제한 이 있 고 I, X, C 에 국한 되 며 큰 수의 왼쪽 에 놓 으 면 하나만 사용 할 수 있다.(*) V 와 X 왼쪽 의 작은 숫자 는 I 만 사용 할 수 있 습 니 다.(*) L 과 C 왼쪽 의 작은 숫자 는 X 만 사용 할 수 있 습 니 다.(*) D 와 M 왼쪽 의 작은 숫자 는 C 만 사용 할 수 있 습 니 다.
1. 로마 숫자 로 아라비아 숫자 돌리 기:
현재 처 리 된 문자 에 대응 하 는 값 이 이전 문자 와 같다 면 임시 변수 에 이 문 자 를 추가 합 니 다.예 를 들 면 III = 3
현재 가 이전 보다 크다 면 이 단락 의 값 은 현재 이 값 에서 앞 에 기 록 된 임시 변수 중의 값 을 빼 야 한 다 는 것 을 설명 합 니 다.예 를 들 어 IV = 5 – 2
현재 이전 보다 작 으 면 임시 변수의 값 을 결과 에 추가 한 다음 다음 기록 을 시작 할 수 있 습 니 다.예 를 들 면 VI = 5 + 1
int getnum(char c){
	switch (c){
	case 'I':return 1;
	case 'V':return 5;
	case 'X':return 10;
	case 'L':return 50;
	case 'C':return 100;
	case 'D':return 500;
	case 'M':return 1000;
	default:return 0;}
}
int romanToInt(char* s) {
	int l=strlen(s);
	if(l==0)return 0;
	int sum=getnum(s[l-1]);
	for(int i=l-1;i>=0;i--){
		if(getnum(s[i-1])>=getnum(s[i])){sum+=getnum(s[i-1]);}
		else sum-=getnum(s[i-1]);
	}
	return sum;
}

2. 아라비아 숫자 로마 숫자 돌리 기
관건 은 1 - 3999 사이 의 로마 숫자 를 찾 는 기본 기호 이다. 예 를 들 어 1 - 20 이내 에 I, II, III, IV, V, VI, VII, IX, X, XI, XII, XIII, XIV, XV, XVII, XVIII, XVIII, XIX, XX, 기본 기 호 는 I, V, X 이 고 다른 숫자 는 모두 이 를 바탕 으로 하 는 조합 이다. 자 료 를 조회 하여 1 - 3999 사이 의 기본 기 호 를 찾 아 보 자.
"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"
대응:
1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
다음은 간단 하 다. 아라비아 숫자 와 각 기본 기호 숫자의 크기 를 직접 판단 하면 된다.
char* intToRoman(int num) {
    int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; 
	char chara[13][3]={"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; 
	char *p=(char*)malloc(sizeof(char)*15);
	memset(p,0,sizeof(p));
	int i;
	int j=0;
	for(i=0;i<13;i++){
		while(num>=values[i])
		{for(int k=0;chara[i][k]!='\0';k++)p[j++]=chara[i][k];
		num-=values[i];
		}
	}
	p[j]='\0';
	return p;
}

좋은 웹페이지 즐겨찾기