#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 7
char digits[N] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int values[N] = { 1 , 5 , 10, 50, 100, 500, 1000};
int digitsToValues(char ch){
int i;
for(i = 0; i < N; i++){
if(digits[i] == ch){
return values[i];
}
}
return 0;
}
int findMaxIndex(char str[], int L, int R){
int max = digitsToValues(str[L]);
int maxIndex = L;
for(int i = L; i <= R; i++){
int num = digitsToValues(str[i]);
if(num > max){
max = num;
maxIndex = i;
}
}
return maxIndex;
}
int romanToNumber(char str[], int L, int R){
if(R == L){
return digitsToValues(str[L]);
}else if(R > L){
return 0;
}else{
int mi = findMaxIndex(str, L, R);
int max = digitsToValues(str[mi]);
int left = romanToNumber(str, L, mi-1);
int right = romanToNumber(str, mi+1, R);
return max - left + right;
}
}
int romanToNumber2(char str[]){
int L = 0;
int R = strlen(str) - 1;
return romanToNumber(str, L, R);
}
int main(){
char str[] = "MCMLIV";
// char str[1024];
// cin >> str;
int result = romanToNumber2(str);
cout << result << endl;
return 0;
}
罗马数字转阿拉伯数字
最新推荐文章于 2024-03-07 14:56:37 发布