#include<iostream>
#include<cstdio>
#include<cmath>
#define db(a) cout << #a << " = " << a << endl;
using namespace std;
int divisores[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string romanos[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int main(){
string numero;
int num;
while(cin >> numero){
int len = numero.size();
num = 0;
if(numero[0] > '0' && numero[0] <= '9'){
int p = 1;
for(int i = 0; i < len; i++){
num += p * (numero[len - i - 1] - 48);
p *= 10;
}
string res = "";
for(int i = 0; i < 13; i++){
if(num >= divisores[i]){
int div = num / divisores[i];
num = num % divisores[i];
for(int k = 0; k < div; k++)
res += romanos[i];
}
}
cout << res << endl;
}
else{
for(int i = 0; i < len; i++){
if(numero[i] == 'M') {
num += 1000;
continue;
}
if(numero[i] == 'C' && i + 1 < len && numero[i + 1] == 'M') {
num += 900;
i++;
continue;
}
if(numero[i] == 'D') {
num += 500;
continue;
}
if(numero[i] == 'C' && i + 1 < len && numero[i + 1] == 'D') {
num += 400;
i++;
continue;
}
else if(numero[i] == 'C') {
num += 100;
continue;
}
if(numero[i] == 'X' && i + 1 < len && numero[i + 1] == 'C') {
num += 90;
i++;
continue;
}
if(numero[i] == 'L') {
num += 50;
continue;
}
if(numero[i] == 'X' && i + 1 < len && numero[i + 1] == 'L') {
num += 40;
i++;
continue;
}
if(numero[i] == 'X') {
num += 10;
continue;
}
if(numero[i] == 'I' && i + 1 < len && numero[i + 1] == 'X') {
num += 9;
i++;
continue;
}
if(numero[i] == 'V') {
num += 5;
continue;
}
if(numero[i] == 'I' && i + 1 < len && numero[i + 1] == 'V') {
num += 4;
i++;
continue;
}
if(numero[i] == 'I') {
num++;
continue;
}
}
cout << num << endl;
}
}
return 0;
}
lunes, 24 de octubre de 2011
11616 - Roman Numerals, uva
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario